目录
结构体(Struct)是一种帮助组织和操作相关属性的数据结构;在引擎中,结构体会被引擎反射系统识别为
UStruct
,但不属于UObject生态圈,且不能在UClasses内部使用;
在相同的数据布局下,
UStruct
比UObject
能更快创建;UStruct支持
UProperty
,但它不由垃圾回收系统管理,不能提供UFunction
;
一,实现一个UStruct
要把一个结构体变成 UStruct
,遵循以下步骤:
-
打开要定义结构体的 header (.h) 文件;
-
将
USTRUCT
宏放在结构体定义的上方; -
将
GENERATED_BODY()
宏作为定义的第一行;
USTRUCT([Specifier, Specifier, ...])
struct FStructName
{
GENERATED_BODY()
};
注:可以用UPROPERTY
来标记结构体的相关变量,使其在虚幻反射系统( Unreal Reflection System)和蓝图脚本(Blueprint Scripting)中可见;
二,Struct Specifiers
Atomic | 表示该结构体应始终被序列化为一个单元,不会为该类创建自动生成的代码,标头仅用于解析元数据; |
BlueprintType | 将此结构体作为一种类型公开,可用于蓝图中的变量; |
NoExport | 将不会为该类创建自动生成的代码,标头仅用于解析元数据; |
三,最佳做法与技巧
UStruct
可以使用引擎的智能指针(smart pointer)和垃圾回收系统以防止垃圾回收删除UObjects
;- 结构体最好用于简单数据类型,对于更复杂的交互,可使用
UObject
或AActor
子类来代替; UStructs
不可以 用于复制,但UProperty
变量 可以 用于复制;- 引擎可自动为结构体创建Make和Break函数;
- Make函数出现在任何带有
BlueprintType
标签的Ustruct
中; - 如在UStruct中至少有一个
BlueprintReadOnly
或BlueprintReadWrite
属性,Break函数就会出现; - Break函数创建的纯节点为每个标记为
BlueprintReadOnly
或BlueprintReadWrite
的资产提供一个输出引脚;
- Make函数出现在任何带有