虚幻引擎程序设计浅析-第一章
1.1 简述
UE中最重要的五个类:
- UObject
- Actor
- Pawn
- Controller
- Character
1.2 UObject和Actor
1.2.1 UObject类
什么时候应该继承自
UObject类
当某一个类继承自UObject类时,应该是需要获取UObject类所提供的功能。具体来说,UObject类提供了以下功能:
垃圾收集
在C++中,内存管理是手动控制的。为此UE提供了两个解决方案:
- 继承 - UObject类。通过- UProperty标记的变量会自动地进行对象的生命周期管理
- 智能指针。只有非 - UObject类型才能使用这种方法
反射
反射是一种编程语言中的机制,能够让程序在运行时像拆积木一样,动态拆解、查看并操作自身代码结构(如类、方法、属性)。
可以这样理解:当你用调试器查看对象时,即使你事先不知道这个对象内部有什么属性和方法,调试器也能通过反射机制动态列出所有内容供你检查。
序列化
通过序列化,我们可以将一个类的对象保存在磁盘中,并在下次运行时进行加载。
当然我们也可以自行实现序列化功能,而不依赖于UObject类。
与Editor进行交互
让你的类的变量能够在Editor中进行编辑。
运行时类型识别
顾名思义
网络复制
继承自UObject类,其被宏标记的变量能够自动完成网络复制的功能。
1.2.2 Actor类
什么时候应该继承自
Actor类
思考这个问题,我们可以沿用前面的思路,也就是明确Actor类提供了怎么的功能:
Actor类能够被挂载组件。这里的“组件”并非Actor,我们需要格外注意,UE中的组件与Unity中的组件有本质上的区别。
在UE中,一个场景实体对应一个类。而在Unity中,每个对象可以挂载多个脚本组件,其中每个脚本是一个单独的类。
所以,问题的答案很明确:当需要挂载组件时,才应该继承自Actor类。
1.3 Pawn、Character和Controller
1.3.1 Pawn
是所有可被控制对象的基类。
1.3.2 Character
Character类继承自Pawn类,专为人形角色设计的子类。额外提供了一个特殊的组件,实现了基础的角色移动功能。
1.3.3 Controller
Controller 决定 “做什么”,Pawn 负责 “怎么做”。