01 五个基类的简介(UObjectActorPawnCharacterController)

01 五个基类

1.1 UObject类

​ UObject是提供了如下功能的类:

  • 垃圾回收(GC)

  • 引用自动更新(Reference updating)

  • Reflection 反射

  • Serialization 序列化

  • Automatic updating of default property changes自动检测默认变量的更改

  • Automatic property initialization 自动变量初始化

  • Automatic editor integration 和虚幻引擎编辑器的自动交互

  • Type information available at runtime 运行时类型识别

  • Network replication 网络复制

GC的两种方案

​ 对于继承自UObject类的对象,如果有一个指针指向它,并且它被UPROPERTY标记了,那么会被自动GC

​ 对于非UObject对象,才能选择智能指针进行自动内存释放。

反射

​ 反射可以在运行时获取对象的类信息,成员信息等。

序列化

​ 将对象的信息保存到磁盘,下次再完好无损地加载。

与Editor的交互

​ 允许类的变量能够被Editor简单编辑

运行时类型检测

​ 注意:虚幻引擎打开了/GR-编译器参数。即,不允许使用C++标准的dynamic_cast

​ 使用Cast<>模板函数来完成RTTI的功能。

网络复制

​ 在网络游戏的c/s模式下,可以自动将被标记的变量,从服务器复制到客户端

其它注意

构造函数与DefaultObject

​ 由于UObject会在引擎加载阶段创建一个**DefaultObject**,因此构造函数会被默认调用一次。

构造函数与UWorld

​ 构造函数被调用时,UWorld不一定存在,因此不要在构造函数中调用GetWorld()

1.2 Actor类

​ Actor类的标志是:能够挂载组件。(它可以没有坐标与旋转量,因为它可以不存在实体。)

​ 组件:组件不是Actor,而是UObject

​ 如果需要挂载组件,例如SceneComponent(提供坐标与旋转量),StaticMeshComponent(被渲染)…选择Actor。

1.3 Pawn/Character/Controller(控制与被控制)

1.3.1 Pawn

Pawn代表傀儡,即一个可以被控制的对象(无论是AIController或者玩家Controller)。

1.3.2 Character

​ Character代表角色,特点在于:

​ 它提供了一个特殊的组件Character Movement。这个组件提供了一个基础的、基于胶囊体的角色移动功能。包括移动和跳跃,以及如果你需要, 还能自行扩展出更多,例如蹲伏和爬行。

注意

​ 如果用不上这类移动(例如飞船类的移动),请继承Pawn而不要去继承Character

1.3.3 Controller

​ Controller用于操纵Pawn或者Character的行为。它可以是AIController(行为树/EQS环境查询系统),或者玩家Controller。通常在这个类中绑定输入,然后转化为对Pawn/Character方法的调用(例如:前进、开火、跳跃等肉体执行的方法)。

抽象出Controller的原因:不同的怪物可能会共享同一套Controller,从而获得类似的行为。

​ 灵魂可以通过Possess/UnPossess来控制一个肉体,或者从一个肉体上离开。