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

相关推荐
吴梓穆2 小时前
UE5 InVideo插件 使用
ue5
让我们一起加油好吗2 小时前
【基础算法】初识搜索:递归型枚举与回溯剪枝
c++·算法·剪枝·回溯·洛谷·搜索
郝学胜-神的一滴2 小时前
Horse3D游戏引擎研发笔记(七):在QtOpenGL环境下,使用改进的Uniform变量管理方式绘制多彩四边形
c++·3d·unity·游戏引擎·图形渲染·虚幻·unreal engine
2401_876221344 小时前
Reachability Query(Union-Find)
c++·算法
ReedFoley4 小时前
【笔记】动手学Ollama 第七章 应用案例1 搭建本地AI Copilot编程助手
人工智能·笔记·copilot
长安即是故里5 小时前
Maxwell学习笔记
笔记·学习
躲着人群6 小时前
次短路&&P2865 [USACO06NOV] Roadblocks G题解
c语言·数据结构·c++·算法·dijkstra·次短路
咸甜适中7 小时前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
笔记·学习·rust·egui
一只鲲7 小时前
56 C++ 现代C++编程艺术5-万能引用
开发语言·c++
努力敲代码的小盆友7 小时前
[自用笔记]上传本地项目至github
笔记·github