当前位置: 首页 > news >正文

UE5.3 C++ USTRUCT 的再次理解

一.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; 
};

http://www.dtcms.com/a/26723.html

相关文章:

  • 143.WEB渗透测试-信息收集-小程序、app(14)
  • verilog基础知识
  • 什么是网关,网关的作用是什么?网络安全零基础入门到精通实战教程!
  • Deepseek API接入pycharm实现辅助编程教程
  • 2月19号
  • 【架构思维基础:如何科学定义问题】
  • 模型量化初始知识
  • (leetcode42 前缀后缀最值)接雨水
  • 【HeadFirst系列之HeadFirst设计模式】第5天之工厂模式:比萨店的秘密武器,轻松搞定对象创建!
  • C++(23):lambda可以省略()
  • 深度学习-122-大语言模型LLM之基于langchian自定义国内联网查询工具并创建智能代理
  • rust笔记5-derive属性2
  • VSCode 中 Git 添加了多个远端,如何设置默认远端
  • PL/SQL 异常处理
  • 华为 eNSP:MSTP
  • “深入浅出”系列之QT:(10)Qt接入Deepseek
  • DeepSeek与ChatGPT:会取代搜索引擎和人工客服的人工智能革命
  • RelaTree隐私政策
  • FreeSwitch之mod_cidlookup 和 mod_blacklist和mod_curl的抉择
  • 【核心算法篇十九】《 DeepSeek因果推断:双重差分模型如何破解政策评估的「时空难题」》
  • 在ubuntu上用Python的openpyxl模块操作Excel的案例
  • 蓝桥杯备赛1-3时间加法
  • JupyterNotebook高级使用:常用魔法命令
  • bigemap pro如何合并面文件
  • django连接mysql数据库
  • 第三章 组件(5)- 数据绑定
  • 深研究:与Dify建立研究自动化应用
  • 撕碎QT面具(2):groupBox内容居中显示
  • MySQL 一条 SQL 执行流程解析
  • /etc/docker/daemon.json这个跟/etc/yum.repos.d/docker-ce.repo这个文件的关系