独立游戏《星尘异变》UE5 C++程序开发日志2——创建并编写一个C++类

在本篇日志中,我们将要用一个C++类来实现一个游戏内的物品,同时介绍UCLASS、USTRUCT、UPROPERTY的使用

一、创建一个C++类

我们在UE5的"内容侧滑菜单"中,在右侧空白中右键选择"新建C++类",然后可以选择一个想要的父类,这里我们要实现的是物品,所以选择Object类作为父类

在"类的类型"中选择公共,使其能够被其他模块调用

二、在.h文件中声明变量

在VS中打开我们刚刚生成的.h文件,"#pragma once"表示这个.h无论被包含多少次,都只会编译一次,"第三个头文件是必须最后一编译的头文件,所以如果要新添头文件,必须放在这个头文件前面。

#pragma once#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "Stardust.generated.h"

接着在下面可以看到一个"UCLASS"宏,表明接下来所声明的类将会暴露给UE5的反射系统。

"Blueprintable"表示这个c++类可以派生出蓝图类。

"GENERATED_BODY()"表示不继承父类的构造函数,要想继承父类的构造函数,需要替换为"GENERATED_UCLASS_BODY()"

UCLASS(Blueprintable)
class ASTROMUTATE_2_API UStardust : public UObject
{GENERATED_BODY()
public:};

接下来我们创建一个结构体来表示物品的各个属性,在结构提前用USTRUCT宏将该结构体暴露给反射。

"BlueprintType"表示该结构体可以作为蓝图中的一种数据类型。

暴露给反射系统的结构体名称必须以F开头,在UE编辑器中该结构体的名称将不包含首字母F,同时须使用"GENERATED_USTRUCT_BODY"宏。

USTRUCT(BlueprintType)
struct FStardustTable 
{//星尘数据GENERATED_USTRUCT_BODY()FStardustTable();UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StardustStruct")FString StardustName;//名称UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StardustStruct")EStardustFormEnum StardustForm;//形态UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "StardustStruct")int StardustStackLimit;//堆叠上限
//为增加可读性,这里只展示了物品的部分属性
};

接下来我们先声明一个构造函数,用于在物品生成时初始化属性。

要声明暴露给反射系统的变量,需要使用"UPROPERTY"宏。

"EditAnywhere"表示该变量在编辑器中的类默认设置和实例化细节面板中都可以被编辑,"Edit"也可以替换成"Visible",表示该变量只读。

"BlueprintReadWrite"表示该变量在蓝图中可以获取和设置,可将"ReadWrite"替换为"ReadOnly"表示该变量在蓝图中尽可获取。

"Category"可以设置该变量所处的目录。

第一个声明的变量为FString,该数据类型与stl中的string类似,为可修改的字符串。

第二个声明的变量是一个枚举,枚举的定义同样需要先使用"UENUM"宏将其暴露给反射。

"BlueprintType"表示该枚举可以作为蓝图中的数据类型。

"UMETA"中可以定义枚举内容在蓝图中显示的名称。

UENUM(BlueprintType)
enum class EStardustFormEnum//形态
{Empty UMETA(DisplayName = "Empty"),Type1 UMETA(DisplayName = "Type1"),Type2 UMETA(DisplayName = "Type2"),Type3 UMETA(DisplayName = "Type3"),
};

未完待续

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

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

相关文章

Spring AOP(Aspect-Oriented Programming,面向切面编程)介绍

Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要模块,它提供了一种强大的方式来帮助开发者实现横切关注点(cross-cutting concerns)的模块化。横切关注点是指那些影响多个模块…

Linux设备模型(十一) - platform设备

一,platform device概述 在Linux2.6以后的设备驱动模型中,需关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候, 会寻找与之匹配的驱动;相反的,在系统每注册一个设备的时…

可让照片人物“开口说话”阿里图生视频模型EMO,高启强普法

3 月 1 日消息,阿里巴巴研究团队近日发布了一款名为“EMO(Emote Portrait Alive)”的 AI 框架,该框架号称可以用于“对口型”,只需要输入人物照片及音频,模型就能够让照片中的人物开口说出相关音频&#xf…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …

Vulnhub靶机:Bellatrix

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:Bellatrix(10.0.2.9) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/hogwa…

网络学习:MPLS技术基础知识

目录 一、MPLS技术产生背景 二、MPLS网络组成(基本概念) 1、MPLS技术简介:Multiprotocol Lable Switching,多协议标签交换技术 2、MPLS网络组成 三、MPLS的优势 四、MPLS的实际应用 一、MPLS技术产生背景 1、IP采用最长掩码…

Power BI vs Superset BI 调研报告

调研结论 SupersetPower BI价格开源①. Power BI Pro 每人 $10/月($120/年/人) ②. Power BI Premium 每人 $20/月($240/年/人) ③. Power BI Embedded:4C10G $11W/年 权限基于角色的访问控制,支持细粒度的访问: 表级别、库级别、图表级别,看板级别,用户级别 基于角色…

【推荐】免费AI论文写作神器-「智元兔 AI」

还在为写论文焦虑?免费AI写作大师来帮你三步搞定! 智元兔AI是ChatGPT的人工智能助手,并且具有出色的论文写作能力。它能够根据用户提供的题目或要求,自动生成高质量的论文。 不论是论文、毕业论文、散文、科普文章、新闻稿件&…

#WEB前端(浮动与定位)

1.实验&#xff1a; 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; float、position 没有应用浮动前 应用左浮动和右浮动后 应用定位 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><me…

pyqt5怎么返回错误信息给页面(警告窗口)

在软件设计中&#xff0c;我们可能会遇到对异常的处理&#xff0c;有些异常是用户需要看到的&#xff0c;比如说&#xff0c;当我们登录出错的时候&#xff0c;后端需要给我们返回响应的错误信息&#xff0c;就像下图实现的这样。 类似这种效果&#xff0c;我们该如何实现&…

javaWebssh题库管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh题库管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

「MySQL」基本操作类型

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;数据库 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 数据库的操作 创建、显示数据库 使用 create 创建一个数据库 create database goods;然后可以用 show databases 来查看已经创建的数…

javaWebssh网上超市销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh网上超市销售管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCA…

指针深刻理解

指针深刻理解 看完鹏哥讲的c语言进阶视频后&#xff0c;又找来C语言深度剖析这本书仔细看了一遍&#xff0c;来进一步巩固和理解指针这个重点。 1&#xff1a;数组 如上图所示&#xff0c;当我们定义一个数组 a 时&#xff0c;编译器根据指定的元素个数和元素的类型分配确定大…

身份证识别系统(安卓)

设计内容与要求&#xff1a; 通过手机摄像头捕获身份证信息&#xff0c;将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中。1&#xff09;所开发Apps软件至少需由3-5个以上功能性界面组成。要求&#xff1a;界面美观整洁、方便应用&#xff1b;可以使用Android原生…

JS 对象数组排序方法测试

输出 一.Array.prototype.sort() 1.默认排序 sort() sort() 方法就地对数组的元素进行排序&#xff0c;并返回对相同数组的引用。默认排序是将元素转换为字符串&#xff0c;然后按照它们的 UTF-16 码元值升序排序。 由于它取决于具体实现&#xff0c;因此无法保证排序的时…

数据可视化基础与应用-02-基于powerbi实现医院数据集的指标体系的仪表盘制作

总结 本系列是数据可视化基础与应用的第02篇&#xff0c;主要介绍基于powerbi实现医院数据集的指标体系的仪表盘制作。 数据集描述 医生数据集doctor 医生编号是唯一的&#xff0c;名称会存在重复 医疗项目数据projects 病例编号是唯一的&#xff0c;注意这个日期编号不是真…

面试时如何回答接口测试怎么进行

一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 …

【C++ 07】string 类的常用接口介绍

文章目录 &#x1f308; Ⅰ string 类对象的常见构造函数&#x1f308; Ⅱ string 类对象的容量相关操作&#x1f308; Ⅲ string 类对象的访问及遍历1. 下标访问及遍历2. 正向迭代器访问3. 反向迭代器访问 &#x1f308; Ⅳ string 类对象的修改操作1. 插入字符或字符串2. 字符…

Vue前端的工作需求

加油&#xff0c;新时代打工人&#xff01; 需求&#xff1a; 实现带树形结构的表格&#xff0c;父数据显示新增下级&#xff0c;和父子都显示编辑。 技术&#xff1a; Vue3 Element Plus <template><div><el-table:data"tableData"style"width…