网站建设 商标小米官方网站开发版
目录
一,实现一个UStruct
二,Struct Specifiers
三,最佳做法与技巧
结构体(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函数出现在任何带有
