概况
Gameplay类利用特殊标记,因此在继续之前,先来介绍一下虚幻属性系统的基础知识。UE4使用其自己的反射实现来支持动态功能,如垃圾回收、序列化、网络复制和蓝图/C++通信。这些功能是可选的,意味着您必须将正确的标记添加到类型,否则虚幻将忽略它们,而不会为它们生成反射数据。下面是对基本标记的简要概述:
- UCLASS() - 用于告诉虚幻为结构体生成反射数据。类必须派生自UObject。
- USTRUCT() - 用于告诉虚幻为结构体生成反射数据。
- `GENERATED_BODY()** - UE4将这个标记替换为将为该类型生成的所有必要的样板代码。
- UPROPERTY() - 支持将UCLASS的成员变量或USTRUCT用作UPROPERTY。UPROPERTY有很多用法。它可以允许复制变量、序列化变量和从蓝图访问变量。它们可以供垃圾回收程序使用,用来跟踪对 UObject 的引用次数。
- UFUNCTION() - 支持将UCLASS的类方法或USTRUCT用作UFUNCTION。UFUNCTION可以允许从蓝图调用类方法,用作RPC等多种用途。
MyUobject代码示范
#include "MyObject.generated.h"
UCLASS(Blueprintable)
class UMyObject : public UObject
{
GENERATED_BODY()
public:
MyUObject();
UPROPERTY(BlueprintReadOnly, EditAnywhere)
float ExampleProperty;
UFUNCTION(BlueprintCallable)
void ExampleFunction();
};
首先我们会注意到包含了 MyClass.generated.h。UE4将生成所有反射数据并放入该文件中。我们必须将该文件作为声明类型的标头文件中的最后一个包含语句,将其包含进去。注意,MyClass.generated.h必须写在其他引用头文件之后,以免报错。
该示例中的 UCLASS、UPROPERTY 和 UFUNCTION 标记包含一些其他说明符。这些虽不是必需的,但为了演示目的,已经添加了一些常见说明符。这样我们可以指定特定行为或属性。
- Blueprintable - 该类可以由蓝图扩展。
- BlueprintReadOnly - 该属性可以从蓝图读取,但不能写入蓝图。
- EditAnywhere - 该属性可以在原型和实例上的属性窗口中编辑。
- Category - 定义该属性将出现在编辑器”细节(Details)”视图下面的哪个部分。这对于整理结构而言十分有用。
- BlueprintCallable - 该功能可以从蓝图调用。
更多参考
说明符众多,不便在此一一列出,但可以参考下面的链接:
UCLASS说明符列表
UPROPERTY说明符列表
UFUNCTION说明符列表
USTRUCT说明符列表