UStruct,UScriptStruct,FStructOnScope,FInstancedStruct之间的区别和转换

- 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 用于在堆上持久管理结构体实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值