目录 - Table of contents

前言

由于腾讯客户端公开课的课程内容没有录播,并且内容量非常大,另外由于前段时间碰上期末周,所以一直没法快速跟上作业内容。于是我决定先从UE5的C++开发的基础学起,再去完成搁置的作业内容。

学习内容来自于:【虚幻5】UE5C++零基础全网全流程开发从入门到进阶教程合集

开发工具:VS2022

另外在开始学习之前,在评论区看到有推荐一个插件,设置教程链接如下:将 UnrealVS 扩展用于 Unreal Engine C++ 项目

创建项目

下图会展示如何创建一个UE5游戏开发的C++项目

创建项目

创建完成后会自动打开Visual Studio,按下图所示点击生成可以编译代码,若无问题可以生成成功。

生成 生成成功

然后看一下侧边的解决方案,其中Engine/UE5是引擎自身的相关文件,Games/Project4Learning就是刚刚创建的项目的一些文件信息。Config是一些配置文件,Source是项目的一些源文件,现在能看到的文件是创建项目时会默认生成的。

信息介绍

其中Build.cs文件很重要,它是描述的每个模块的环境依赖信息,表示我这个项目用到了哪些模块,比如这里引擎默认带有的模块"Core", “CoreUObject”, “Engine”, “InputCore”, “EnhancedInput”。第3行的using UnrealBuildTool;用到的UBT,会编译每一个模块并处理相关依赖信息。UHT(Unreal Header Tool)会收集我们虚幻的一些头文件,编译生成反射数据,这些反射数据会生成一个generator.h或.cpp当中。我们的头文件发生变化时,虚幻引擎底层也会调用并产生新的反射数据

build文件

Target.cs它主要用于描述构建目标(Build Target),使用 Unreal Build System API 来定义目标,并指定如何构建和配置项目或模块。负责指导 Unreal Build System (UBT) 如何处理项目的编译、链接以及其他构建过程。

头文件的含义

由于5.3以后blank模板就不会默认生成GameModeBase相关文件,所以首先打开UE5Editor生成相关类以及文件。右击解决方案中的UE5设置为启动项,点击本地Windows调试器会自动打开UE5Editor,接着点击上方的工具—>新建C++类—>游戏模式基础—>下一步—>创建类。此时会触发热更新,需要点击全部重新加载来实时更新改动。

头文件信息

其中,#pragma once用来保证每个头文件只会被编译一次,这是一个预处理指令;“CoreMinimal.h"包含了一套来自UE4的核心编程环境的普遍存在类型;“GameFramework/GameModeBase.h"是因为该文件本身是基于GameModeBase生成的文件,所以默认要包含该头文件;“MyGameModeBase.generated.h"存储了一些虚幻反射的数据,也就是来自UHT生成的反射数据存储在其中,每一个类都会包含这个文件,且该文件的include要放在末位。

UEC++各个宏的作用

GENERATED_BODY()	//表示我们不直接使用父类的构造函数,并且默认成员变量和成员函数是private
GENERATED_UCLASS_BODY()	//表示我们使用父类的构造函数,会自动为我们生成一个带有参数的构造函数,成员变量和成员函数是public
UCLASS()		//告知虚幻引擎生成类的反射数据,类必须派生自UObject。
UPROPERTY()		//属性声明宏,此宏声明该属性在反射系统(虚幻C++在C++的基础上实现了反射系统,负责垃圾回收、引用更新、编辑器集成等功能)中的行为
UFUNCTION()		//函数声明宏,反射系统可识别的C++函数
USTRUCT()		//结构体声明宏,反射系统可识别的C++结构体
UENUM()			//枚举声明宏,反射系统可识别的C++枚举

TEXT()是一个宏,用于将字符串字面量转换为TCHAR类型的字符串,TCHAR类型会根据项目的字符集设置自动适配为合适的字符类型。使用TEXT()宏可以确保你的字符串在不同字符集设置下都能正确处理。