结构体(Struct) 是一种数据结构,帮助你组织和操作相关属性。在虚幻引擎中,结构体会被引擎的反射系统识别为 UStruct
,但不属于 UObject生态圈,且不能在UClasses的内部使用。
实现UStruct
要把一个结构体变成 UStruct
,请遵循以下步骤:
-
打开你要定义结构体的 header (.h) 文件。
-
要定义你的C++结构体,请将
USTRUCT
宏放在结构体定义的上方。 -
将
GENERATED_BODY()
宏作为定义的第一行。
其结果应该与下面的的例子一致:
USTRUCT([Specifier, Specifier, ...])
struct FStructName
{
GENERATED_BODY()
};
你可以用UPROPERTY
来标记结构体的相关变量,使它们在虚幻反射系统( Unreal Reflection System)和蓝图脚本(Blueprint Scripting)中可见。参见[UProperty Specifiers]列表(programming-and-scripting/programming-language-implementation/unreal-engine-reflection-system/Properties/Specifiers),了解该属性在引擎和编辑器的各种模块中如何表现。
结构体说明符
结构体说明符 提供元数据,控制你的结构在引擎和编辑器中各方面的表现。
结构体说明符 | 效果 |
Atomic |
表示该结构体应始终被序列化为一个单元。将不会为该类创建自动生成的代码。标头仅用于解析元数据。 |
BlueprintType |
将此结构体作为一种类型公开,可用于蓝图中的变量。 |
NoExport |
将不会为该类创建自动生成的代码。标头仅用于解析元数据。 |
最佳做法与技巧
下面是一些使用 UStruct
时需要记住的有用提示:
-
UStruct
可以使用虚幻引擎的智能指针和垃圾回收系统来防止垃圾回收删除UObjects
。 -
结构体最好用于简单数据类型。对于你的项目中更复杂的交互,也许可以使用
UObject
或AActor
子类来代替。 -
UStructs
不可以 用于复制。但是UProperty
变量 可以 用于复制。 -
虚幻引擎可以自动为结构体创建Make和Break函数。
- Make函数出现在任何带有
BlueprintType
标签的Ustruct
中。 - 如果在UStruct中至少有一个
BlueprintReadOnly
或BlueprintReadWrite
属性,Break函数就会出现。 - Break函数创建的纯节点为每个标记为
BlueprintReadOnly
或BlueprintReadWrite
的资产提供一个输出引脚。
- Make函数出现在任何带有