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

目录

一、从UE编辑器中创建

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

(1)方式1

(2)方式2

二、在文件夹中直接创建

[三、在Visual Studio中创建](#三、在Visual Studio中创建)


一、从UE编辑器中创建

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

这里新建的类的父类选择"Object"

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

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

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

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

(1)方式1

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

(2)方式2

打开"xxx.Build.cs"

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

cpp 复制代码
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可以利用虚幻引擎的反射系统、垃圾回收机制以及其他面向对象的特性。

cpp 复制代码
#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 要求的宏,用于标记类中需要由代码生成工具生成代码的部分,通常放在类定义的主体中,以确保反射相关的代码被正确生成

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

cpp 复制代码
#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函数中的操作被执行,在实际应用中,可以在这之后添加额外的类实例化操作。

相关推荐
huangkj-henan20 分钟前
DA217应用笔记
笔记
Young_2022020222 分钟前
学习笔记——KMP
笔记·学习
娅娅梨26 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
兵哥工控30 分钟前
MFC工控项目实例二十九主对话框调用子对话框设定参数值
c++·mfc
暖和_白开水31 分钟前
材质(三)——材质参数集和材质函数
ue5·材质
我爱工作&工作love我38 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
秀儿还能再秀1 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
WCF向光而行1 小时前
Getting accurate time estimates from your tea(从您的团队获得准确的时间估计)
笔记·学习
娃娃丢没有坏心思1 小时前
C++20 概念与约束(2)—— 初识概念与约束
c语言·c++·现代c++
lexusv8ls600h1 小时前
探索 C++20:C++ 的新纪元
c++·c++20