当前位置: 首页 > article >正文

UE5官方文档(第一人称射击游戏教程)解读 第七章

好了今天来到我们的第七章今天将承上启下延伸输入部分的工作。配置角色移动Coder 03 Configure Character Movement with C in Unreal Engine | Unreal Engine 5.7 Documentation | Epic Developer Community// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include CoreMinimal.h #include GameFramework/Character.h #include EnhancedInputComponent.h #include EnhancedInputSubsystems.h #include InputActionValue.h #include AdventureCharacter.generated.h class UInputMappingContext; class UInputAction; class UInputComponent;如图所示我们在上一节对蓝图有了一些认知并且学会了引入模块使用接着学会了如何在特定代码里引入我们想要的功能。如上图所示那么在引入后我们就要正式开始写输入相关功能。声明InputMappingContext指针请先跟着官方文档来一遍。可以看见我们本小节写了下面两行东西。这是什么意思呢请回忆我们正常c开发的时候不管是在栈上开辟内存储存变量数据还是在堆上进行它似乎都不需要前面带个宏之类的。但是我们这两行代码前面是一个UPROPERTY宏然后里面有参数下面则是创建一个输入映射上下文的指针。我们之前说过UE5类内成员多使用指针是为了优化和管理也与垃圾回收内存回收的引用链有关那UPROPERTY宏是什么它的参数有什么用呢这个就和我们说过的运行时知晓类信息直接相关了。这个概念很难理解我们举一个毫不相关的代码例子。class A { public: int a10; float b20; }; A a1; float ca1.aa1.b;在类A里面我们有两个变量一个int一个float然后我们在栈上开辟内存A的大小然后我们在栈上面开辟了内存float大小存储c。运行的时候我们的程序只知道在栈上开辟内存大小是intfloat然后前半截int大小存储了对应二进制数据然后后半截float大小存储了对应二进制数据。然后栈上开辟内存float大小提取前面那块内存的前半截后后半截进行运算指令结果存入开辟的内存。运行过程中程序根本不知道这个类叫做A不知道这个类的实例叫a1不知道有个float变量叫做c不知道类内成员变量叫做a和b也不知道它们是什么int或者float或者A类型它们只知道按多少多少字节或者位去读取对应地址的输入然后进行指令c是静态语言编译的时候就决定好了一切运行时就按我前面说的那样动态语言我则不在这里赘述这是一个作业。为什么UE5需要在运行时知晓变量信息请试想一下c是静态语言编译后不会有所谓的类型信息而运行则是在编译后。我们如果想要在运行时增加变量比如生成敌人类实例生成角色类实例当然不限于这个功能还有编辑器实时显示修改都需要运行时知晓类信息这里作为一个作业拓展那我们就要以某种手段存储类的信息然后运行时可以读取这个信息去开辟内存存储数据。那么UPROPERTY宏就担任了这个功能我说过静态语言是编译期决定好一切那么被UPROPERTY宏标记的变量会在编译时把类信息传递给某些文件存着有需要的时候实时读取。那说白了就是相当于一个变量出生登记。但是不限于UPROPERY宏进行标记我们还有UCLASS宏USTRUCT宏……其实你看名字也知道是对谁用的。那么说完UPROPERTY宏的作用了UPROPERTY宏参数是什么意思呢下面是我编译后角色类蓝图的配置。首先我们知道我们的角色蓝图类继承了我们的c角色类所以我们在这里改了c角色类代码并编译作为它的子类的角色蓝图类肯定会有变化这下看懂了吧我们声明了一个IMC指针变量然后放在目录category的输入input下面EditAnywhere顾名思义就是可以在编辑器任何地方编辑然后是BlueprintReadOnly的意思是蓝图只能读取我们设定的这个数据不能进行覆写操作就像我们设置了一个int a10;a就不准再修改了。其实我们还可以看见我们之前写的IMC指针变量本质上是一个数据填充位可以填充IMC数据后面IA也是一样。这个参数其实还有很多个和instance相关的也有大家可以去了解一下作为一个不太重要的作业。那好了我们本小节的学习就完美完成了。声明跳跃和移动InputAction指针还是跟着官方文档做一遍。这部分的原理和前面一样不多赘述。为什么输入需要IMC和IA请回顾前面学习声明Move()函数还是跟着官方文档做一遍。那么在我们对于玩家输入做完一系列处理后我们终于可以写输入后的反馈了。不过还记得我们前面手动引发bug吗写完声明一定要加上实现哦哪怕实现是空的都行没有实现会在链接阶段发生问题。在这里我们漏掉了一个东西那就是函数前也要进行宏标记登记变量信息函数前面用UFUNCTION为啥函数也要用呢函数的本质可以理解为指令集你放指令也需要一块内存调用的时候也需要知道指令集开始的地址然后才能一条一条读取处理。说着就想到了函数指针这种东西拓展作业可以去完成一下这个在UE5中特指类的实例中函数是以函数指针还是纯函数成员存在如果是前者有什么好处原生c对于类实例和UE5对于类实例的处理差异非常大所以我在这里只提UE5此外我们可以看到这里函数里面获取了一个参数const FInputActionValue Value是引用类型说明不希望我们会误修改顺带希望快速传递不经过拷贝。那我们看英文顾名思义这是一个输入值那多半就是我们设备交互发出的信号经过处理后的数据比如我按着A想让角色往左走。实现移动函数设置Move()函数还是先跟着官方文档做一遍。void AAdventureCharacter::Move(const FInputActionValue Value) { // 2D Vector of movement values returned from the input action const FVector2D MovementValue Value.GetFVector2D(); // Check if the controller possessing this Actor is valid if (Controller) { } }在前面那个小节我们可以看出来FInputActionValue对数据做了一定的处理可是为什么是2D向量呢欸我们在打游戏的时候方向键其实只能走前后左右范围也就是所谓的只能在平面移动高度变化是通过跳跃等行为完成你看我们这里写的是Move函数对吧。所以使用的是2D向量。我们翻回前面IMC对应的部分看一下。这就对应上了。我们输入的原始数据是Axis2D然后经过转换成为FVector2D.使用Move()添加2D移动输入还是先根据官方文档做一遍。void AAdventureCharacter::Move(const FInputActionValue Value) { // 2D Vector of movement values returned from the input action const FVector2D MovementValue Value.GetFVector2D(); // Check if the controller posessing this Actor is valid if (Controller) { // Add left and right movement const FVector Right GetActorRightVector(); AddMovementInput(Right, MovementValue.X); // Add forward and back movement const FVector Forward GetActorForwardVector(); AddMovementInput(Forward, MovementValue.Y); } }可以看见我们这次是在Controller的if判断里面加东西。之前我们说过Pawn和Character类比起父类Actor多的就是获取Controller输入可以有很多种嘛AI操控或者玩家操控而Controller是封装成指针的。而我们知道如果Controller是空指针但使用了的话就会崩溃报错。拓展作业在哪些情况下Controller是空指针接着看下来Right和Forward可以理解为是左右方向和前后方向的值引用然后把增量加上传递回去。可以这样理解假设我的初始平面坐标是11我向前走两步是02向右走三步是30然后我们总得加出来最终坐标是43最后我们需要把坐标数据重新写回角色信息。好了今天的学习到此为止。

相关文章:

UE5官方文档(第一人称射击游戏教程)解读 第七章

好了,今天来到我们的第七章,今天将承上启下,延伸输入部分的工作。 配置角色移动 Coder 03 Configure Character Movement with C in Unreal Engine | Unreal Engine 5.7 Documentation | Epic Developer Community // Copyright Epic Games…...

2026最新大模型入门电子书学习推荐,必读9本大模型书籍

大模型入门必读的9本书籍汇总NO.1: 《基于GPT-3,ChatGPT,GPT-4等Transformer架构的自然语言处理》主要内容: 了解用于解决复杂语言问题的新技术。将GPT-3与T5、GPT-2和基于BERT的Transformer的结果进行对比。使用TensorFlow、PyTorch和GPT-3执…...

85%企业将淘汰纯业务程序员!2026年前,大模型才是你的职业救命稻草!

文章指出传统技术岗面临淘汰风险,85%企业计划在2026年前淘汰纯业务型程序员。未来职场核心竞争力在于掌握大模型技术。文章强调大模型技术是技术人的时代红利,提供从入门到精通的全套视频教程,涵盖提示词工程、RAG、Agent等技术点。文章还分析…...

大模型落地应用全景解析:出海企业如何抓住价值变现新风口?

本文深度剖析了中国大模型在金融、零售、汽车、教育等领域的落地应用现状,指出市场重心已从技术基建转向场景变现,企业从免费试用转向为实际效果付费。文章强调智能体(Agent)成核心趋势,AI原生产品将重塑用户体验。同时…...

微信小程序逆向工程深度解析:wxappUnpacker实用指南

微信小程序逆向工程深度解析:wxappUnpacker实用指南 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 微信小程序逆向工程是移动应用安全研究的重…...

OpenClaw底层揭秘:打造私有化AI Agent团队的核心原理与实战解析!

本文深入剖析了OpenClaw作为自托管多通道AI Agent网关的底层架构与核心原理。从简洁的Gateway进程设计、JSON over WebSocket的统一通信协议,到Agent循环处理消息的完整流程、多Agent路由的绑定机制,以及精细化的会话管理与独特的Markdown记忆系统&#…...

Keil中sprintf和自定义Serial_Printf,哪个更适合你的串口打印需求?

Keil开发中的串口打印方案:sprintf与自定义Serial_Printf深度对比 在嵌入式开发中,串口打印是调试和日志记录的重要手段。Keil MDK作为广泛使用的嵌入式开发工具链,提供了多种实现串口打印的方案。对于已经了解printf重定向基础概念的开发者…...

【Android】Hypic 醒图国际版 最新版-免登录

【Android】Hypic 醒图国际版 最新版-解锁永久会员-免登录 链接:https://pan.xunlei.com/s/VOtJaC8K4sK_rrqnINu3HULdA1?pwddfdj# Hypic醒图国际版是一款功能强大的照片编辑应用程序,专为满足专业摄影师和业余爱好者的多样化需求而设计。...

避开GD32F303 PWM配置的3个常见坑:从时钟使遇到占空比设置

GD32F303 PWM实战避坑指南:从时钟配置到波形调优 第一次接触GD32F303的PWM功能时,我像大多数开发者一样,以为按照手册配置就能顺利输出波形。直到示波器上出现杂乱的信号,才意识到这个看似简单的功能背后藏着不少"坑"。…...

校园项目 / 课程设计:如何包装成求职加分项

前言:你的校园项目,是不是写得像“课程作业汇报”? “完成课程设计《图书管理系统》,使用Java+MySQL开发,实现增删改查功能”——如果你还在这么写校园项目,恭喜你!成功加入“HR扫一眼就划走”豪华套餐。 现在的求职市场卷成什么样?某互联网大厂HR透露:“每天收到50…...

非结构化数据处理有没有更高效的办法?2026智能体端到端方案彻底终结数据孤岛

在2026年的数字化深水区,企业面对的不再是单纯的数据库增删改查,而是由海量PDF合同、非标图片、多模态音视频、复杂的系统日志以及社交媒体碎片信息构成的“非结构化数据冰山”。 据行业数据显示,企业内部超过80%的数据以非结构化形式存在。过…...

【AI Agent数据分析实战指南】:20年专家亲授5大落地场景、3类避坑红线与实时决策增效方案

更多请点击: https://intelliparadigm.com 第一章:AI Agent数据分析应用的演进逻辑与核心价值 AI Agent在数据分析领域的应用并非技术堆叠的结果,而是由数据复杂度跃升、业务响应时效压缩、以及人机协同范式重构三重力量共同驱动的系统性演进…...

STM32F4电池电量监测实战:用HAL库和ADC DMA,从硬件分压到软件滤波全流程解析

STM32F4电池电量监测实战:从硬件设计到软件滤波的工程化实现 在物联网设备和便携式电子产品的开发中,精确监测电池电量是一个看似简单却暗藏玄机的关键技术点。许多开发者都曾遇到过这样的困境:实验室测试时电量显示精准稳定,一旦…...

RMSNorm:LLM 里的归一化为什么换成了这个

本文基于昇腾CANN和昇腾NPU,围绕 ops-transformer 仓库的相关技术展开。 LayerNorm 在大模型里被 RMSNorm 替换了。LayerNorm 做了减均值再除方差,RMSNorm 只除均方根——去掉了减均值那一步。少一次 Reduce 操作,在量产推理里省掉 15-20% 的…...

AI写论文真给力!4款AI论文生成工具,开启高效论文写作模式!

AI论文写作工具评测 还在为撰写期刊论文、毕业论文或职称论文而感到烦恼吗?在人工写作的过程中,面对那海量的文献资料,犹如在茫茫大海中捞针,而那些繁琐的格式要求更是让我们无从下手,不断的修改反复消耗我们的耐心&a…...

在Node.js后端服务中集成Taotoken,实现稳定可靠的大模型功能调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Node.js后端服务中集成Taotoken,实现稳定可靠的大模型功能调用 将大模型能力集成到后端服务是现代应用开发的常见需求…...

NRF52832实战:从SYSTEM_ON到SYSTEM_OFF,手把手教你配置蓝牙低功耗(附代码避坑)

NRF52832低功耗实战:从代码优化到硬件调校的全链路指南 在嵌入式蓝牙产品开发中,低功耗设计往往是决定产品成败的关键因素。NRF52832作为Nordic Semiconductor的经典蓝牙低功耗(BLE)解决方案,其灵活的低功耗模式配置既带来了无限可能&#x…...

Java 零基础全套教程,数据结构与集合源码,笔记 168-174

Java 零基础全套教程,数据结构与集合源码,笔记 168-174 一、参考资料 【Java视频教程,java入门神器(附300道Java面试题剖析)】 https://www.bilibili.com/video/BV1PY411e7J6/?p168&share_sourcecopy_web&vd_…...

05-系统技术架构师必备——软件工程方法与UML建模体系

关键词:UML建模、Scrum、敏捷开发、软件测试、白盒测试、McCabe复杂度、瀑布模型、RUPUML 软件工程 敏捷开发 软件测试 Scrum RUP 系统架构 建模系统技术架构师必备——软件工程方法与UML建模体系 摘要 UML建模和软件工程方法是系统技术架构师与开发团队沟通的"…...

【反演】基于粒子群算法PSO进行反演附Matlab代码和报告

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

2026数字营销专业学数据分析的职业优势

一、数字营销与数据分析的融合趋势2026年数字营销领域将进一步依赖数据驱动决策。随着消费者行为数字化程度加深,企业需通过数据分析实现个性化营销、动态定价和实时优化。复合型人才需同时掌握营销策略与数据建模能力,以应对跨渠道归因、隐私安全等复杂…...

一键搞定B站视频下载:跨平台工具BilibiliDown完整使用指南

一键搞定B站视频下载:跨平台工具BilibiliDown完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirro…...

Topit:macOS窗口置顶的终极方案,提升多任务效率300%的必备工具

Topit:macOS窗口置顶的终极方案,提升多任务效率300%的必备工具 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 在macOS上工作时&#xf…...

踩坑实录:Seatunnel同步Hive到StarRocks时,数据量翻倍和中文乱码怎么破?

Seatunnel数据同步实战:破解Hive到StarRocks的三大典型问题 在数据仓库迁移和ETL流程中,Seatunnel作为一款高效的数据同步工具,已经成为许多企业技术栈中的关键组件。但当我们将Hive数据同步到StarRocks时,往往会遇到一些令人头疼…...

【混合可再生能源模拟】使用遗传算法优化光伏板和电池的容量附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

抖音无水印下载器:5分钟掌握高效批量下载的完整指南

抖音无水印下载器:5分钟掌握高效批量下载的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

STM32H743音频实战:用CubeMX和I2S驱动WM8978,从寄存器配置到代码移植避坑

STM32H743音频实战:CubeMX与I2S驱动WM8978的深度避坑指南 第一次在STM32H743上调试WM8978音频编解码器时,我盯着示波器上杂乱无章的I2S信号波形发呆了半小时。耳机里偶尔传来的爆裂声仿佛在嘲笑我的无知——这场景想必很多嵌入式音频开发者都不陌生。本文…...

专业级EdgeRemover配置指南:5种高效部署方案深度解析

专业级EdgeRemover配置指南:5种高效部署方案深度解析 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover EdgeR…...

告别RGB!用HSL颜色空间在STM32上做颜色识别,为什么更准?附OV7725实战代码与调参心得

HSL颜色空间在嵌入式视觉中的实战优势:基于STM32与OV7725的鲁棒识别方案 当我们在嵌入式设备上实现颜色识别时,光照变化总是最令人头疼的问题之一。早晨、中午和傍晚的光线差异,阴影的干扰,甚至是LED频闪带来的影响,都…...

如何在Mac上免费快速导出微信聊天记录:WeChatExporter终极指南

如何在Mac上免费快速导出微信聊天记录:WeChatExporter终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而焦虑&#x…...