链接
该文档主要通过学习自己构建文件,形成GamePlay模块。下图是利用引擎创建的一个空模板C++代码结构
简要流程
UBT
虚幻编译工具(UBT:Unreal Build Tool)是一个自定义工具,负责管理通过各种编译配置来编译虚幻引擎4(UE4)源代码的过程。该工具处理所有复杂的项目编译工作,编译UE4的逐个模块并处理依赖等。我们编写的Target.cs,Build.cs都是为这个工具服务的。 并将项目与引擎关联起来。该过程以透明方式进行,只需通过标准的Visual Studio 构建工作流程构建项目即可。
在项目的目录查找依赖性时,会忽略IDE解决方案文件,而是去查找Build.cs文件,如果没有该文件就不会被UBT发现,进而不会被编译。
创建项目
在Source文件夹下创建一个新的文件夹,该文件夹为一个新的GamePlay模块,在该文件夹下添加Name.Bulid.cs文件。
using UnrealBuildTool;
public class NewGamePlayMo: ModuleRules
{
public NewGamePlayMo(ReadOnlyTargetRules Tartget): base(Tartget)
{
//模块依赖函数,比如之后的AIModule也需要在Build.cs文件中添加,这样才能编译AI
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
}
}
创建[Name]Module的cpp文件,使得引擎可以进行卸载和加载
//NewGamePlayMoModule.cpp
#include "Modules/ModuleManager.h"
IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, NewGamePlayMo,"NewGamePlayMo");
这段代码为模块提供了默认实现,可以手动编写该模块的类、其构造函数以及启动和关闭函数,创建更详细的实现。但是,对于大部分Gameplay模块,此默认实现对于加载和卸载你的模块是足够的。
编译模块
右键.uproject文件,generate visual studio files重新生成IDE解决方案。使得新添加的GamePlay模块可见
注册模块
为了使能够在项目中使用我们自己新建的GamePlay模块,需要在.uproject文件中注册模块
//CreateModule.uproject
{
"FileVersion": 3,
"EngineAssociation": "4.27",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "CreateMoudle",
"Type": "Runtime",
"LoadingPhase": "Default"
},
{
"Name": "NewGamePlayMo",
"Type": "Runtime"
}
]
}
可以使用此列表条目来配置它将在哪个 加载阶段(Loading Phase)中加载,以及其类型(Type)
接下来需要将新建的模块添加到UE自己创建的Bulid.cs文件中
//CreateModule.Build.cs
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "NewGamePlayMo" });
编译运行后,创建C++类就可以选择在NewGamePlayMo模块下建立,表现为cpp和h文件出现在NewGamePlayMo文件夹中。