【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”,添加如下代码。代码的意思为定义一个名为UXGBaseObject1
的UObject
类的头文件代码。这个类是所有虚幻引擎对象的基类,通过继承UObject
,UXGBaseObject1
可以利用虚幻引擎的反射系统、垃圾回收机制以及其他面向对象的特性。
#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
函数中的操作被执行,在实际应用中,可以在这之后添加额外的类实例化操作。