- UObject
- Actor
- Pawn
- Controller
- Character
UObject类
- 垃圾收集
- 继承自UObject类,同时指向UObject类实例对象的指针成员变量,使用UPROPERTY宏进行标记。虚幻引擎的UObject架构会自动地被Uproperty标记的变量考虑到垃圾回收系统中,自动地进行对象的生命周期管理。
- 采用智能指针。只有非UObject类型,才能够使用智能指针进行自动内存释放。
- 反射
- 序列化
- 一个类的对象保存到磁盘,同时在下次运行时完好无损地加载,需要继承自UObject类。
- 可以通过纯c++类手动实现序列化所需地函数,来让这个类支持序列化功能,这并不是UObject类独有的。
- 与虚幻引擎编辑器的交互
- 运行时类型识别
- 虚幻引擎打开了/GR-编译器参数,无法使用C++标准的RTTI机制:dynamic_cast。
- 希望使用,继承自UObject,然后使用Cast<>函数来完成。
- 网络复制
UObject类会在引擎加载阶段,创建一个Default Object默认对象:
- 构造函数并不是在游戏运行的时候调用,即便只有一个UObject对象存在于场景中,构造函数依然会被调用两次。
- 构造函数被调用的时候,UWorld不一定存在。GetWorld()可能为空。
Actor类
Actor类的能力:能够被挂在组件。
虚幻引擎中:
- 一个场景实体对应一个类
- Component的含义被大大削弱,只是组件,不能越俎代庖
坐标与旋转量,只是一个Scene Component组件,如果Actor不需要一个固定位置(Manager),甚至可以不给Actor挂载Scene Component组件。
- Actor被渲染?给一个静态网格组件。
- Actor有骨骼动画?给一个骨架网格物体组件。
- Actor能移动?直接在Actor类中写代码来实现,也可以附加一个Movement组件专门处理移动。
需要挂载组件的时候,才应该继承自Actor。
Pawn
Pawn类提供了被“操作”的特性,能够被一个Controller操纵,这个Controller可以是玩家,也可以是AI。
Character
Character类代表一个角色,继承自Pawn类。
Character类提供了一个特殊的组件,Character Movement。这个组件提供了一个基础的、基于胶囊体的角色移动功能。
Controller
Controller操纵着Pawn和Character的行为,可以是AI,AI Controller类,在这个类中使用行为树或EQS环境查询系统。