- UStruct:
- UStruct 是 Unreal Engine 中所有结构体的基类,但通常你不会直接使用它。它更多是用于引擎内部的实现。可以根据结构路径加载UStruct。
// 本地加载
FString StructPath = TEXT("/Script/GamePlay.MyStruct");
UStruct* MtStruct = FindObject<UStruct>(nullptr, *StructPath);
// FStructOnScope -> FStruct*
UStruct* PayloadStruct = OutPayload.GetStruct();
- UScriptStruct:
- UScriptStruct 是一个从 UStruct 派生的类,用于表示可以在蓝图和 C++ 中使用的结构体。使用 UScriptStruct 你可以创建能够被序列化、在编辑器中显示并且能够在蓝图中使用的结构体。
//FStructOnScope -> UScriptStruct
FStructOnScope InPayload;
check(InPayload.GetStruct()->IsA<UScriptStruct>());
UScriptStruct* InStruct = (UScriptStruct*)InPayload.GetStruct();
- FStructOnScope:
- FStructOnScope 是一个轻量级的结构体包装器,用于在栈上管理一个 UScriptStruct 的实例。它可以用于临时存储结构体数据,自动管理内存,并在作用域结束时释放它。
- 适合在需要临时结构体(例如在函数中处理数据)时使用。
//UStruct->FStructOnScope
FStructOnScope OutPayload;
OutPayload.Initialize(MyStruct);
// or
FStructOnScope OutPayload(MyStruct);
- FInstancedStruct:
- FInstancedStruct 是一个用于在堆上管理 UScriptStruct 实例的结构。它允许你创建和管理 UScriptStruct 的实例,可以通过它来序列化和克隆结构体。
- 它适合需要在堆上持久存储 UScriptStruct 实例的场景,例如在容器中存储多个结构体实例(适用于保存多个不同类型的Struct)。
// @param PayloadStruct 是UStruct*,OutPayload是FStructOnScope
FInstancedStruct EventParams;
EventParams.InitializeAs((UScriptStruct*)PayloadStruct, OutPayload.GetStructMemory());
// 或者如果知道具体的Struct结构
FInstancedStruct EventParams = FInstancedStruct::Make<FMyStruct>();
### 总结
- UScriptStruct 是用于定义可在蓝图中使用的结构体。
- FStructOnScope 是一个轻量级的临时结构体管理工具。
- FInstancedStruct 用于在堆上持久管理结构体实例。
3137

被折叠的 条评论
为什么被折叠?



