虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言

        结构体的定义和枚举类似,枚举的定义有两种方式。区别是结构体必须以“F”开头命名,而枚举不用。

        额外再讲了一下蓝图生成时暴露变量的方法。

二、实现

2.1、结构体

 1、定义结构体

 代码如下,注意这个定义的代码一定要在“UCLASS()”的前面,否则会编译报错。另外结构体的命名也必须以“F”开头,否在也会编译报错。通过如下定义的结构体,在蓝图中可以创建一个新的变量,如图2.1.1所示,然后可以选中刚创建的类型变量。


USTRUCT(BlueprintType)
struct FMyStruct//必须以F开头
{GENERATED_USTRUCT_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyStruct")int32 Health;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyStruct")FString MyName;
};UCLASS()
图2.1.1
2、再定义结构体变量

        通过如下代码定义一个上述结构体类型的变量,在蓝图中可以编辑和使用该类型的变量,如图2.1.2所示,为面板中的变量。图2.1.3为蓝图中调用该定义的变量。

	//结构体UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyStruct")FMyStruct MyStructValue;
图2.1.2
图2.1.3

3、结构体和数据表格进行绑定

在代码中创建一个新的结构体,该结构体继承数据表类,创建完后需要将所需的头文件添加到Including中,鼠标悬浮在”FTableRowBase"中通常会出现自动添加的提示按钮,编译。

USTRUCT(BlueprintType)
struct FDataStruct :public FTableRowBase
{GENERATED_USTRUCT_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyDataStruct")int32 Age;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyDataStruct")FString MyName;
};

然后在编辑器中创建数据表格,并选中刚刚创建的类型,如图2.1.4所示,打开数据表格即可看到

图2.1.4

结构体的具体变量,在添加一个新的行数据后可以对变量进行赋值,如图2.1.5所示

图2.1.5

还有一种创建CSV格式的文件,在文件中定义相同变量名的列数据,如图2.1.6所示为CSV格式的

图2.1.6

表格数据,将其直接拖动到虚幻引擎中的内容处,会自动弹出数据表格的创建窗口,如图2.1.7所示,在行类型中选中刚刚创建的结构体,然后点击应用,这个就会将刚刚CSV表中的数据填充到此时创建的数据表中,如图2.1.8所示。

图2.1.7
图2.1.8

2.2、定义一个枚举

1、第一种方式

首先定义一个宏,代码如下,生成枚举的反射数据,通过反射将枚举暴露给蓝图,实现C++和蓝图的通信,BlueprintType的作用是可以在蓝图创建变量的时候也可以作为选项。其中UMETA是操作变量的属性更改,代码中修改最终展示的名字。

enum class MyCustomEnum1 :uint8
{OneType UMETA(DisplayName = "One"),TwoType UMETA(DisplayName = "Two"),ThreeType UMETA(DisplayName = "Three"),
};

通过以下代码可以实现在各类面板和蓝图中使用该变量

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyEnum")MyCustomEnum1 MyEnum1;

2、第二种方式

 第二种定义枚举的方式代码如下,这种定义的MyEnumType里只能定义一个,超出会编译报错。

UENUM(BlueprintType)//生成枚举的反射数据,通过反射将枚举暴露给蓝图,实现C++和蓝图的通信,BlueprintType的作用是可以在蓝图创建变量的时候也可以作为选项
namespace MyEnumType
{enum MyCustomEnum{Type1,Type2,Type3,};
}

3、在蓝图中的呈现

如图2.2.1所示为第二种方式创建的变量在创建蓝图新变量时可以选中该枚举作为变量类型。

图2.2.1

同时,在蓝图中也可以调用该枚举,如图2.2.2所示:

图2.2.2
通过以下代码可以实现在各类面板和蓝图中使用该变量
	//枚举UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyEnum")TEnumAsByte<MyEnumType::MyCustomEnum> MyCustomEnum;

同时也可以在蓝图中调用和编辑该变量,如图2.2.3所示

图2.2.3

2.3、蓝图生成时暴露

定义一个变量如下所示,在ExposeOnSpawn后面可以赋值也可以如下所示,不会影响后续的操作

	/// <summary>/// 生成蓝图时暴露的变量/// </summary>UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyExposeOnSpawn", meta = (ExposeOnSpawn))float myExposeOnSpawnValue;

然后在蓝图中可以在生成该类型的类的时候讲上述定义的变量暴露出来,如图2.3.1所示

图2.3.1

这个和蓝图中定义的普通变量勾选”生产时公开“是一样的逻辑和道理。

三、总结

3.1、所有的定义都应该放在“UCLASS()”后面,否则会编译报错“Found 'USTRUCT' when expecting class while parsing class”。

3.2、结构体的命名必须以“F”开头,否则会编译报错“Struct 'MyStruct' has an invalid Unreal prefix, expecting 'FMyStruct”,枚举的命名不用任何固定开头。

3.3、两种枚举定义的方式不同,在C++代码中声明定义后的变量方式也不同。

3.4、结构体和数据表的关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267963.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多种DC电源模块的比较和评价

多种DC电源模块的比较和评价 BOSHIDA DC电源模块是一种重要的电子零件&#xff0c;可以将交流电转换为直流电&#xff0c;并为相应的电路提供所需的电能。随着技术的进步&#xff0c;市场上的DC电源模块种类越来越多&#xff0c;不同类型的DC电源模块有着不同的特点和优缺点。 …

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

vue安装与配置

node node.js的下载&#xff1a;https://nodejs.org/dist 在项目中可能会有版本冲突&#xff0c;这里可以选择自己想要的版本下载&#xff0c;而且一台电脑可以同时安装多个版本的node。当你需要切换版本时直接去更改环境变量即可。下面我安装选择的是压缩包&#xff0c;压缩包…

机器学习几大算法总结

1.K近邻算法 1.1基本思想 对于待判断的点&#xff0c;找到离他最近的几个数据点&#xff0c;根据他们的类型决定待判断点的类型。可用于分类问题&#xff0c;也可以用于回归问题。 1.2基本步骤 数据准备&#xff1a;首先&#xff0c;我们需要收集和准备带有标签的训练数据集…

项目实战二——性能测试方案

这里写目录标题 一、性能测试整体流程介绍二、性能测试时机&#xff08;什么时候去做&#xff1f;&#xff09;三、测试背景(务虚&#xff1a;让不懂的人尽可能看懂)四、术语约定五、测试范围1、调研分析&#xff1a;2、测试范围&#xff1a; 六、性能需求分析1、业务模型预估&…

做数据分析为何要学统计学(6)——什么问题适合使用t检验?

t检验&#xff08;Students t test&#xff09;&#xff0c;主要依靠总体正态分布的小样本&#xff08;例如n < 30&#xff09;对总体均值水平进行差异性判断。 t检验要求样本不能超过两组&#xff0c;且每组样本总体服从正态分布&#xff08;对于三组以上样本的&#xff0…

day38-springboot-crud开发

springboot实现CRUD 一、需求 实现对一张表数据的增删改查,使用springbootssm实现后端接口代码,实现接口工具测试 二、搭建环境 2.1 数据库环境 创建数据库: springboot_crud 注意: 确定是否有该库 创建表: create table stu (id int primary key auto_increment,sname varch…

SAP中有关角色和权限的重要数据库表

1. AGR_USERS 角色与用户对应关系 2. AGR_TEXTS 角色的中文描述 3. AGR_TCODES 查询角色所有的T-code&#xff0c; 报表类型 TR 4. 用户信息USER_ADDR 5. AGR_1251 查询角色所有的T-code &#xff0c;角色对象 S_TCODE 6. USR02 查看哪些用户被锁定&#xff08;UFLAG&…

量化交易与人工智能:Python库的应用与效用

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 量化交易简介 量化交易是一种利用计算机算法执…

docker- 部署Jenkins集成Gitlab

目录 一、部署环境 二、获取镜像 三、配置maven 四、创建挂载目录 五、启动容器 六、Jenkins 初始化 七、相关插件安装与环境配置 八、Jenkins结合Gitlab进行构建及使用Gitlab钩子 一、部署环境 工具版本Docker20.10.14Jenkins2.396Gitlab14.8.2-eeJDK8、11Maven3.6…

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项二三阶段样题一

2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 第二阶段 任务书 任务描述 随着网络和信息化水平的不断发展&#xff0c;网络安全事件也层出不穷&#xff0c;网络恶意代码传播、信息窃取、信息篡改、远程控制等各种网络攻击 行为已严重…

算法Day27 身材管理(三维背包)

身材管理&#xff08;三维背包&#xff09; Description Input Output Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt(); // 输入n的值int money sca…