UE4 C++反射机制
准备工作 创建一个 UE4 C++ 项目命名为 ReflectionDemo1,不包含初学者内容。然后创建一个继承自 UObject 的测试类,命名为 UStudent。 将 GENERATED_BODY() 宏改为 GENERATED_UCLASS_BODY(),然后实现构造函数: AReflectionDemo1Ga...
准备工作 创建一个 UE4 C++ 项目命名为 ReflectionDemo1,不包含初学者内容。然后创建一个继承自 UObject 的测试类,命名为 UStudent。 将 GENERATED_BODY() 宏改为 GENERATED_UCLASS_BODY(),然后实现构造函数: AReflectionDemo1Ga...
动画层与动画层接口 动画层和蓝图函数类似,有输入姿态和输出姿势(类似参数和返回值)。 动画层用于简化流程,避免动画图表连线混乱。把一些单独功能的姿势封装起来,输出一个姿势。使用 关联的动画图层 节点来调用指定动画层,类似...
动画曲线 动画曲线(Animation Curves)提供一种在动画播放时更改材质参数值或变形目标值的方法。 指定要修改的资源(材质或变形目标),命名曲线,然后在动画的持续时间内调整关键帧值。 动画通知 用于播放音效、一段时间的特效、动...
叠加动画 叠加动画不是最终值,而是根据叠加动画减去基础姿势计算出来的一个增量。 比如身体倾斜姿势减去一个站立姿势,得到的增量就是这个叠加动画的运动量。 参考姿势: 需要叠加的姿势: 在动画序列的附加设置里,设置 Additive...
区别 函数和事件在很多时候都可以混用。 函数可以有返回值,而事件不能有返回值。 函数可以有局部变量,而事件没有。 函数定义独占蓝图整个页面,而多个事件可以共享同一个页面。 函数中不能执行 delay、timeline 等延迟操作,而事件...
Trace Channel 射线检测通道,默认有 Visibility 和 Camera 两个通道。 可以简单理解为射线的类型/通道,也就是表示这射线是啥。 我们可以自己添加一个 Trace Channel 为 Trajectory 表示子弹弹道。在调用 LineTraceByChannel 函数进...
使用Rider编程 通过 Rider 运行项目并启动 UE4 编辑器,在修改代码后,点击 Build -> Build Startup Project:XXX 编译。这样会热重载,让 C++ 代码的修改对编辑器生效。 类命名规范 U - UObject 派生类(Actor系列除外),例如 UTe...
安装引擎注意点 注册 Epic Games 账号后,需要绑定 GitHub 账号,才能在 GitHub 上查看 Unreal Engine 引擎源码。 安装引擎时,一定要勾选 输入调试用符号,方便后续逆向学习分析: 修改默认缓存路径 在 Windows 环境,默认缓存路径...
测试游戏 这是 Steam 上国外的一款 FPS 小众射击游戏,玩法类似战地,画风跟你的世界差不多。 经过分析,该游戏存在毁灭性漏洞,修改玩家本地的其他玩家的坐标数据为自己旁边的坐标,可以将敌对玩家短暂拉扯到自己面前并击杀他们。自...
UE4子弹常识 子弹在游戏中一般都会给出 UI 显示,我们可以根据子弹变化,很容易精确搜索到子弹的地址。而子弹的射速、后坐力等数据,基本都是在子弹内存区域前后范围内的。 找子弹基址 多次精确搜索子弹数量,找到子弹数量的地址: ...
为什么要找所有玩家的血量? 用于绘制所有玩家的血条,判断玩家是否死亡。 传统找法 一般 FPS 射击游戏中的血量满血时都是数值100类型 float。所以我们满血的时候先精确扫描单浮点100,然后掉血了搜减少的数值。没掉血再搜不变的数值...
为什么要找骨骼基址? 找骨骼基址是为了实现绘制骨架和骨骼自瞄,比如瞄准头部骨骼、胸部骨骼。 找骨骼基址 对自己的 Actor 的地址进行结构分析,防止分析错地址最好直接用 APawn,然后根据特征去查找。 ComponentToWorld 是 3x3 结构...
标识的作用? 我们如何区分 ActorArray 中的 Actor 是敌人、队友、自己、物品还是其他东西?比较通用的做法是对比多个 Actor 的结构,找出不同类型的 Actor 在同一偏移,数值的异同规律。 比如在 Actor 下 0x555 偏移,类型为 4 Bytes...
为什么需要摄像机矩阵? 我们可以用屏幕尺寸 + Actor 三维坐标 + 摄像机矩阵,通过固定算法计算出 Actor 的屏幕坐标,从而实现绘制 Actor 的数据,实现透视效果。 常规方式 先扫未知的初始值,类型单浮点。 移动镜头并搜索变动的数值...
为什么要在ActorArray中找坐标? 我们知道 ActorArray 中存放的是所有附近的 Actor,如果我们找到 ActorArray 下的坐标,则可通过遍历获取所有 Actor 的坐标。 开始找坐标 选中我们找到的 Count 地址,浏览相关内存区域(Ctrl+B),然...