文章

虚幻引擎程序设计浅析-第一章

1.1 简述

UE中最重要的五个类:

  • UObject

  • Actor

  • Pawn

  • Controller

  • Character


1.2 UObjectActor

1.2.1 UObject

什么时候应该继承自UObject

当某一个类继承自UObject类时,应该是需要获取UObject类所提供的功能。具体来说,UObject类提供了以下功能:

垃圾收集

在C++中,内存管理是手动控制的。为此UE提供了两个解决方案:

  1. 继承UObject。通过UProperty标记的变量会自动地进行对象的生命周期管理

  2. 智能指针。只有非UObject类型才能使用这种方法

反射

反射是一种编程语言中的机制,能够让程序在运行时像拆积木一样,动态拆解、查看并操作自身代码结构(如类、方法、属性)。​

可以这样理解:当你用调试器查看对象时,即使你事先不知道这个对象内部有什么属性和方法,调试器也能通过反射机制动态列出所有内容供你检查。

序列化

通过序列化,我们可以将一个类的对象保存在磁盘中,并在下次运行时进行加载。

当然我们也可以自行实现序列化功能,而不依赖于UObject类。

与Editor进行交互

让你的类的变量能够在Editor中进行编辑。

运行时类型识别

顾名思义

网络复制

继承自UObject类,其被宏标记的变量能够自动完成网络复制的功能。

1.2.2 Actor

什么时候应该继承自Actor

思考这个问题,我们可以沿用前面的思路,也就是明确Actor类提供了怎么的功能:

Actor类能够被挂载组件。这里的“组件”并非Actor,我们需要格外注意,UE中的组件与Unity中的组件有本质上的区别。

在UE中,一个场景实体对应一个类。而在Unity中,每个对象可以挂载多个脚本组件,其中每个脚本是一个单独的类

所以,问题的答案很明确:当需要挂载组件时,才应该继承自Actor类。


1.3 PawnCharacterController

1.3.1 Pawn

是所有可被控制对象的基类​。

1.3.2 Character

Character类继承自Pawn类,专为人形角色设计的子类。额外提供了一个特殊的组件,实现了基础的角色移动功能。

1.3.3 Controller

Controller 决定 “做什么”,Pawn 负责 “怎么做”。

本文由作者按照 CC BY 4.0 进行授权