UE5.3C++USTRUCT的再次理解
- 手机
- 2025-08-28 03:33:02

一.USTRUCT创建
之前写过USTRUCT创建,当时只是作为通信的接口,从零开始创建,能在C++里使用。
UE5.3 C++ USTRUCT的规范使用和制作简单的画线插件_ue5 material parameter collection c++-CSDN博客
我们来看看官方文档里面是如何描述创建的,更简洁但很明白
二.对于USTRUCT的认识
蓝图中的结构体它可以放到DataTab里,去记录Info,作为存档的Slot的插槽等,它需继承UStruct。C++
结构体说明符:
一般就用BlueprintType,向蓝图公开,让它可以在蓝图中调用通信。
USTRUCT一般都用智能指针,管理一些对象。例如图像这些数据,将原始数据保留到内存当中,每个像素都有4个字节存储RGBA。当这些对象,都被被需要,将图像数据释放掉。
USTRUCT不用于复制,UPROPERTY才能用于复制。这个多用与网络同步,只有UPROPERTY可以像下图一样,通过Replicated来网络复制。
USTRUCT的在蓝图中,通信后。可以用Make,Break节点。自带的,实现如下
USTRUCT(BlueprintType) struct FStructTest { GENERATED_USTRUCT_BODY(); public: UPROPERTY(BlueprintReadOnly,EditAnywhere) FString StructName1 = TEXT(""); UPROPERTY(BlueprintReadWrite,EditAnywhere) FString StructName2 = TEXT(""); };三.USTRUCT的应用
结构体里的属性带好反射UPROPERTY后,就可以网络序列化,写为JSON。USTRUCT和String相互转换通信等等。
还可以,在编辑器里的ini设置中,多级菜单,做类似Setting的功能设置。
如果USTRUCT里面还有UObject,是否会被回收。这个需要看情况。
USTRUCT(BlueprintType) struct FStructTest { GENERATED_USTRUCT_BODY(); public: UPROPERTY(BlueprintReadOnly,EditAnywhere) FString StructName1 = TEXT(""); UPROPERTY(BlueprintReadWrite,EditAnywhere) FString StructName2 = TEXT(""); UPROPERTY(BlueprintReadWrite, EditAnywhere) UObject* Testptr = nullptr; };答案就是,看你上级,是否一直都被反射系统识别,最后存在在场景中。如下
UCLASS() class HMSLINESYSTEM_API ALineActor : public AActor { GENERATED_BODY() private: UPROPERTY() TArray<FVector> Points; UPROPERTY(BlueprintReadWrite,EditeAnywhere) FStructTest temp; };如果上级没有被反射识别,拿指针就无法起作用,就会出问题,被回收等等,如下。
UCLASS() class HMSLINESYSTEM_API ALineActor : public AActor { GENERATED_BODY() private: UPROPERTY() TArray<FVector> Points; FStructTest temp; };UE5.3C++USTRUCT的再次理解由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“UE5.3C++USTRUCT的再次理解”