目录
UObject
所有对象类的基础类-AActor, UActorComponent
- Garbage collection垃圾回收,对象可能被多个其他对象引用,在不需要使用的时候释放内存,可能产生野指针。
- 使用UPROPERTY宏进行标记,此类变量会被放进垃圾回收系统中,自动进行对象生命周期的管理。
UCLASS宏
可用于标记从UObject派生的类,使UObject处理系统识别到它们。
AActor
AActor
是所有Actor的基础类,AActor中有一个RootComponent成员,用来保存组件树中的顶级组件,Actors 本身没有变换,所以它们不具有位置、旋转度、 或缩放比例信息。但是,它们可以依赖于它们组件的变换;更确切地讲,是它们的根组件。
AActor包含在AActor生命周期中调用的一系列事件。
- BeginPlay——对象首次在Gameplay中存在时调用。
- Tick——每帧调用一次,随着时间的进行持续完成工作。
- EndPlay——对象离开Gameplay空间时调用。
能够挂载组件(UComponent)
- Scene Component:坐标和旋转量
- 静态网格体组件:Actor被渲染
- Movement Component:移动
UActorComponent
所有Component的基类,Component(组件)是一种特殊类型的对象,不可单独存在,旨在用作Actor中的子对象。
- ActorComponent不能互相嵌套,而在SceneComponent一级才可以嵌套;
- Actor更像是一个容器,只提供了基本的创建、销毁、复制网络和触发事件等逻辑性的功能,而把父子的关系维护都交给了具体的Component。
APawn
APawn继承AActor,物理表示和基本的移动能力,他可以被player 或 AI拥有,可以被Controller操纵。
- ADefaultPawn:默认。
- ASpectatorPawn:派生于DefaultPawn,观战。
- ACharacter:人形,继承APawn,多了一个Character Movement组件。拥有mesh, collision 和内置移动逻辑的Pawn。它们负责玩家和AI和世界之间的所有物理交互,以及负责实现基本的网络和输入模型。
AController
操纵Pawn的行为
AI Controller:行为树/EQS
Player Controller:绑定输入,转化成对Pawn的指令。通过Posses/UnPosses来控制or解除控制。
- Pawn重点在于动这个行为。而Controller代表的是动到“哪里”,重点在于“方向”。所以如果是一些Pawn本身固有的能力逻辑,如前进后退、播放动画、碰撞检测之类的就完全可以在Pawn内实现;而对于一些可替换的逻辑,或者智能决策的,就应该归Controller管辖。
- 如果一个逻辑只属于某一类Pawn,放进Pawn内。而如果一个逻辑可以应用于多个Pawn,那么放进Controller就可以组合应用了。
- Controller的生命期比Pawn要长一些,比如我们经常会实现的游戏中玩家死亡后复活的功能。Pawn死亡后,这个Pawn就被Destroy了,就算之后再Respawn创建出来一个新的,但是Pawn身上保存的变量状态都已经被重置了。
代码规范
- F- 纯c++类
- U- 继承自UObject
- A- 继承自Actor
- S- Slate控件相关类,继承SWidget
- H- HitResult相关类
- T-模板类
- I-抽象界面类
- E-列举
- b-bool
命名(如类型或变量)中的每个单词需大写首字母,单词间通常无下划线。例如:Health
和 UPrimitiveComponent
,Unreal Header Tool 会在编译前检查类名,如果有错则警告并停止编译。
常量:
- 若函数不修改参数,常量指针或引用将传递函数参数,
- 若方法不修改对象,将方法标记为常量。
- 若循环不修改容器,则在容器上使用常量迭代。
大括号固定被放在新行。
if-else语句中的所有执行块都应该使用大括号。
文件名应尽量不添加前缀。例如使用 Scene.cpp
,而非 UnScene.cpp
。