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

【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.kler.cn/news/307265.html

相关文章:

  • 如何快速整理生成python项目依赖的库,提升自动化部署效率
  • jdk相关介绍
  • 【Linux下的cpp】编译调试(gcc、g++、gdb)
  • 工程师 - ACPI和ACPICA的区别
  • [Redis] Redis中的Hash类型和List类型
  • 29 线性表 · 队列
  • 【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)
  • C语言实现贪吃蛇小游戏
  • 【技术科普】揭秘图像处理:从零开始的计算机视觉之旅!
  • 海量数据查找最大K个值:数据结构与算法的选择
  • 【Node.js】初识微服务
  • CANopen协议的理解
  • 不用禁用 iptables 来解决 UFW 和 Docker 的安全问题
  • 智汇创想pytest接口自动化测试框架
  • 通俗地类比计算机视觉中各种层或操作的作用
  • 自动曝光算法
  • IDEA 常用插件推荐,美观又实用!
  • Vue生命周期;Vue路由配置;vue网络请求;vue跨域处理
  • vue3+ts 使用amCharts展示地图,1.点击左侧国家,可以高亮并放大右侧地图对应的国家。 2.展示数据球。
  • python tkinter
  • 物联网智能项目
  • Android Tools | 如何使用Draw.io助力Android开发:从UI设计到流程优化
  • 腾讯云使用
  • 将jar包作为lib导入和maven依赖导入有什么区别?
  • seafaring靶场渗透测试
  • 【C语言】(指针系列2)指针运算+指针与数组的关系+二级指针+指针数组+《剑指offer面试题》
  • 重塑科普展厅魅力,以用户体验为核心的策略性规划新探索!
  • 『功能项目』切换职业面板【48】
  • php部署到apach服务器上遇到的问题
  • 萤石举办2024清洁机器人新品发布会 多维智能再造行业标杆