【UE5 C++课程系列笔记】02——创建C++类的三种方式

目录

一、从UE编辑器中创建

引用头文件报错的两种解决方式

(1)方式1

(2)方式2

二、在文件夹中直接创建

三、在Visual Studio中创建


一、从UE编辑器中创建

在UE编辑器中选择“Tools-》New C++ Class”

这里新建的类的父类选择“Object”

存放路径放在项目路径下的一个名为“BaseType”的文件夹中

引用头文件报错的两种解决方式

创建类后,在VS中重新Build一下项目,可以看到此时cpp文件中报错如下

为了解决这个问题我们有两种解决方式:

(1)方式1

我们可以直接删除前面的“BaseType/”

(2)方式2

打开“xxx.Build.cs”

添加如下代码,表示公开包含的路径

PublicIncludePaths.AddRange(new string[] { "xxx"}
);

重新Build项目。

然后选中“xxx.uproject”,右键选择“Generate Visual Studio project file”

在VS中点击“Reload All”

此时可以看到导入头文件的报错消失了

二、在文件夹中直接创建

在项目中直接创建文本文件,然后更改名称和文件后缀名

 然后选中“xxx.uproject”,右键选择“Generate Visual Studio project file”

此时在VS中就可以看到创建的文件。

打开头文件“XGBaseObject1.h”,添加如下代码。代码的意思为定义一个名为UXGBaseObject1UObject类的头文件代码。这个类是所有虚幻引擎对象的基类,通过继承UObjectUXGBaseObject1可以利用虚幻引擎的反射系统、垃圾回收机制以及其他面向对象的特性。

#pragma once#include "CoreMinimal.h"
#include "XGBaseObject1.generated.h"UCLASS()
class STUDY_API UXGBaseObject1 : public UObject
{GENERATED_BODY()
};
  • #pragma once
    • 预处理器指令,确保该头文件在一个编译单元中只被包含一次,避免重复定义错误。
  • #include "CoreMinimal.h"
    • 包含虚幻引擎的核心最小定义头文件,其中包含了许多基本类型、宏定义和常用的函数声明等,是构建虚幻引擎相关类的基础。
  • #include "XGBaseObject1.generated.h"
    • 由虚幻引擎的代码生成工具(Unreal Header Tool,UHT)使用的头文件。它包含了与类的反射系统相关的代码生成内容,用于支持虚幻引擎的反射特性,如运行时类型信息、序列化等。
  • UCLASS()宏:
    • 虚幻引擎反射系统中的关键宏,用于标记UXGBaseObject1类,使得引擎能够在运行时获取关于这个类的各种信息,例如类名、属性、函数等。
  • class STUDY_API UXGBaseObject1 : public UObject
    • 定义了UXGBaseObject1类,它继承自UObject类。
  • GENERATED_BODY()宏:
    • 这是由 UHT 要求的宏,用于标记类中需要由代码生成工具生成代码的部分,通常放在类定义的主体中,以确保反射相关的代码被正确生成

 

打开源文件,添加如下代码

#include "XGBaseObject1.h"

表示该源文件(.cpp文件)需要使用在头文件(.h文件)中定义的类、函数、变量等。

最后重新Build。

三、在Visual Studio中创建

鼠标右键点击“Add-》Unreal Engine Class” 

这里选择“Actor Class”

修改一下类名,设置保存路径在项目中的“BaseType”文件夹中,然后点击“OK”

点击“Reload”

此时就创建了“XGBaseActor”类的头文件和源文件

在头文件中,代码的大致意思为“XGBaseActor”类继承自AActor,包含了默认的构造函数、BeginPlay(游戏开始或生成时调用)和Tick(每帧调用)函数的声明。

在源文件中,包含了类的构造函数、BeginPlay函数和Tick函数的实现。其中,Super::BeginPlay(),确保了父类(AActor)的BeginPlay函数中的操作被执行,在实际应用中,可以在这之后添加额外的类实例化操作。

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

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

相关文章

解锁阿尔茨海默病(AD)靶点密码,开启靶向治疗新篇章

前 言: 阿尔茨海默病(AD)是一种严重的神经退行性疾病,多发于高龄人群,主要表现为记忆、思维、分析判断、视空间辨认、情绪等障碍。从实验室到临床应用的过程充满挑战。阿尔茨海默症新型疗法的开发主要聚焦于靶向Aβ、…

【随手笔记】

目录 开源许可声明线程数量限制如何获取手机位数令牌桶算法maven介绍pm指令QUICNAT穿越打洞原理Netty详解websocketWebRTC 开源许可声明 几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL) 线程数量限制 一个进程最多可以创建多少个线程 ulimit命…

Vue3.0项目实战(三)——大事件管理系统首页 layout 架子与文章分类的实现

目录 1. 首页 layout 架子 [element-plus 菜单] 1.1 基本架子拆解 2. 登录访问拦截 2.1 需求 2.2 vue3 和 vue2 中的 Vue-Router 区别 3. 用户基本信息获取&渲染 4. 退出功能 [element-plus 确认框] 5. 文章分类页面 - [element-plus 表格] 5.1 基本架子 - PageCo…

专业版PyCharm使用plt.show()显示图像时,如何不显示在右侧工具栏中,而是直接弹出来

解决方案 File -> Settings -> Python Plots -> 取消勾选 Show plots in tool window 示例 默认勾选 Show plots in tool window 的显示效果: 取消勾选 Show plots in tool window 的显示效果:

伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?

近几年,随着我国经济的飞速发展,食堂餐饮也经历了一场变革,越来越多的电器走进了伙房食堂中,实现了电气化,为人们提供了高效便利的饮食服务,但同时也增加了火灾负荷。目前我国非常严重的电气火灾危害&#…

使用 Parallel 类进行多线程编码(下)

2.Parallel.ForEach() 的使用 从 ForEach() 这个名字可以看出该方法是用来遍历泛型集合的,新建一个 ASP.NET Core Web应用的项目,如下: 在 Index.cshtml.cs 文件中增加一个 UserInfo.cs 的类,代码如下: public class U…

组合逻辑电路的分析

目录 组合逻辑电路的分析 分析思路 基本步骤 例题1 例题2 组合逻辑电路的分析 分析思路 基本步骤 例题1 将每个门的输出命名。 写出逻辑函数式。 列真值表。 ABC全一致输出为1。 例题2 观察发现这三个结构是一样的。 逐级写出逻辑函数式: 发现这其实就是异或…

R语言 基础笔记

起因: 今天不知道要写什么。 把之前的笔记复制一下。 代码开头&#xff0c;导入: # 清除系统变量 rm(list ls())# 隐藏警告信息: options(warn -1)# 把当前目录&#xff0c;设置为工作目录。 library(rstudioapi) current_folder_path <- dirname(rstudioapi::getActi…

基于云端的跨平台个人信息管理系统

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

SpringBoot3与SpringBoot2的区别

文章目录 1、JDK环境2、Spring Framework版本3、主要变化和新特性3.1 配置变化3.2 GraalVM3.3 安全性改进3.4 性能优化3.4.1 启动时间3.4.2 内存使用 3.5 改进的依赖管理3.6 全新启动器3.7 Kotlin支持 SpringBoot3与SpringBoot2的区别 1、JDK环境 SpringBoot3最低要求JDK17 S…

前后端时间转换的那些常见问题及处理方法

在现代的Web开发中&#xff0c;前后端分离的架构已经成为主流&#xff0c;尤其是在Spring Boot和Vue.js的组合中。开发者在这种架构下经常遇到的一个问题就是如何处理时间的转换和显示。前端和后端对时间的处理方式不同&#xff0c;可能会导致时间在传递过程中出现问题&#xf…

基于TCP发送北斗消息给船舶设备终端

文章目录 引言I 自定义动态数据交换协议信息交换接口通信格式II Netty实现TCP客户端III Java 原始API实现TCP客户端知识扩展: 基于Netty的定位数据平台通信协议定位方式移动定位设备see also引言 需求:发送北斗消息给船舶设备终端 动态信息交换接口采用TCP自定义协议实现数据…

无线麦克风哪款好用,手机领夹麦克风哪个牌子好,麦克风推荐

随着短视频与直播行业的蓬勃发展&#xff0c;无线领夹麦克风市场迎来了前所未有的繁荣。品牌如罗德、大疆、西圣等麦克风品牌凭借卓越的技术实力与品牌影响力占据了市场的主导地位&#xff0c;其中西圣更是凭借其高性价比和用户口碑&#xff0c;稳居行业口碑品牌前列。但在这光…

Qt 基础按钮布局管理

cpp public: Content(QWidget *parent0); ~Content(); QStackedWidget *stack; QPushButton *AmendBtn; QPushButton *CloseBtn; Baseinfo *baseInfo; Contact *contact; Detail *detail; // 打开 "Content.cpp" 文件&#xff0c;添加如下代码&#xff1a; Content:…

调整兰德系数-评估聚类效果的指标

调整兰德系数&#xff08;Adjusted Rand Index, ARI&#xff09;是一种用于评估聚类结果与真实标签之间相似度的指标。它在传统兰德系数&#xff08;Rand Index, RI&#xff09;的基础上进行了调整&#xff0c;考虑了随机聚类的期望值&#xff0c;因此能够更公平地评估聚类结果…

Chainlit集成Langchain并使用通义千问实现文生图网页应用

前言 本文教程如何使用通义千问的大模型服务平台的接口&#xff0c;实现图片生成的网页应用&#xff0c;主要用到的技术服务有&#xff0c;chainlit 、 langchain、 flux。合利用了大模型的工具选择调用能力。实现聊天对话生成图片的网页应用。 阿里云 大模型服务平台百炼 API…

最新融合多模态的理解和生成的大一统transform架构,show-o模型部署

Show-o是由字节跳动和新加坡国立大学Show Lab共同研发的一个多模态大模型&#xff0c;统一了多模态理解和生成。 Show-o的创新之处在于它将自回归和离散扩散建模相结合&#xff0c;以适应不同和混合模态的输入和输出。 Show-o模型的架构基于预训练的大型语言模型&#xff08;…

web基础之SSRF

1、内网访问 题目提示&#xff1a;访问位于127.0.0.1的flag.php&#xff1b;直接利用ssrf漏洞访问?url127.0.0.1/flag.php 2、伪协议读取文件 &#xff08;1&#xff09;题目提示&#xff1a;尝试去读取一下Web目录下的flag.php吧 &#xff08;2&#xff09;什么是伪协议&a…

【星海出品】go语言环境兼install

官网 https://golang.google.cn/dl/ go的安装包下载地址 https://go.dev/dl/ set GO111MODULEon //是否以Go modules的模式运行项目 auto,on,off set GOARCHamd64 //目标可执行程序操作系统构架 包括 386&#xff0c;amd64&#xff0c;arm set GOBIN //项目的第三方可执行文件目…

【鸿蒙】HarmonyOS NEXT星河入门到实战6-组件化开发-样式结构重用常见组件

目录 1、Swiper轮播组件 1.1 Swiper基本用法 1.2 Swiper的常见属性 1.3 Swiper的样式自定义 1.3.1 基本语法 1.3.2 案例小米有品 2、样式&结构重用 2.1 Extend:扩展组件(样式、事件) 2.2 Styles:抽取通用属性、事件 2.3 Builder:自定义构建函数(结构、样式、事…