1、类
从大部分Gameplay类可以派生出4中主要类型的类。分别是
- UObject
- AActor
- UActorComponent
- UStruct
当然也可以创建不继承任何父类的类,但它们不会参与到引擎内部的构建中。
UObject
虚幻引擎中的基本构建块叫做UObject,该类结合UClass使用,可以提供引擎中的多个最重要的基本服务:
- 反射属性和函数
- 序列化属性
- 垃圾回收
- 按名称查找UObject
- 属性的可配置值
- 属性和函数的联网支持
从UObject派生的每个类都会创建有一个UClass,UClass包含有关该类实例的所有元数据。UObject和UClass一起位于Gameplay对象在其生命周期所有作用的最根部位置。UClass描述的是UObject实例的样子、可序列化和联网的属性等。但是大多数Gameplay开发不会直接从UObject派生,而是从AActor和UActorComponent派生。
AActor
AActor派生自UObject,它由关卡设计师放在关卡中,或者通过Gameplay系统在运行时创建。可以放入关卡中的所有对象都是派生自AActor。AActor可以通过调用代码(C++或蓝图)销毁,或者在所属关卡从内存中卸载时通过标准的垃圾回收机制销毁。
AActor可以通过派生子类实现特殊化,也可以通过复合(充当UActorCOmponent的层级容器)实现特殊化。复合的过程通过AActor的RootComponent成员实现,它包含一个UActorComponent,而UActorComponent包含许多其他成员。在可以将AActor放入关卡之前,它必须包含至少一个USceneComponent,USceneComponent包含该AActor的平移、旋转、缩放。
UActorComponent
UActorComponent具有自己的特殊行为,可以为不同类型的AActor提供相同的功能。如:粒子特效等。AActor通常提供与该类型对象特征有关的高级行为功能,而UActorComponent通常用于提供可能与该对象类型特征不相关的特殊行为功能。UActorComponent可以成为AActor的根组件,也可以与其他组件相连接,一个组件只能连接到一个父组件或Actor,但可以连接多个子组件。子组件的位置、旋转和缩放是相对于父组件或Actor的。
- ActorComponent 是组件的基础类。
- 拥有变形的 ActorComponent 被称为 SceneComponents。
- 可被渲染的则称为 PrimitiveComponents。
UStruct
想要使用UStruct的话,不必从任何特定类扩展,只需要用USTRUCT()标记该结构体即可,引擎构建工具会自动完成基本构建工作。与UObject不同的是UStruct不会被垃圾回收。如果创建了UStruct的动态实例,必须自行管理其生命周期。UStruct应该是纯传统数据类型,包含UObject反射支持,可以在虚幻编辑器、蓝图操控、序列化等中编辑。
2、类命名前缀
虚幻引擎提供了一些在构建过程中自动生成代码的工具,这些工具对类的命名有一些默认规则。如果命名不符合默认规则,则会触发警告或错误。规则如下:
- 派生自 Actor 的类带 A 前缀,如AController。
- 派生自 Object 的类带 U 前缀,如UComponent。
- Enums 的前缀是 E,如EFortificationType。
- Interface 的前缀通常是 I,如IAbilitySystemInterface。
- Template 的前缀是 T, 如TArray。
- 派生自 SWidget的类(Slate UI)带有前缀 S,如SButton。
- 其他类的前缀是 F,如FVector。