UE4中的GamePlay模块

发布时间 2023-11-04 13:54:53作者: XTG111

链接
该文档主要通过学习自己构建文件,形成GamePlay模块。下图是利用引擎创建的一个空模板C++代码结构
image
简要流程
image

UBT

虚幻编译工具(UBT:Unreal Build Tool)是一个自定义工具,负责管理通过各种编译配置来编译虚幻引擎4(UE4)源代码的过程。该工具处理所有复杂的项目编译工作,编译UE4的逐个模块并处理依赖等。我们编写的Target.cs,Build.cs都是为这个工具服务的。 并将项目与引擎关联起来。该过程以透明方式进行,只需通过标准的Visual Studio 构建工作流程构建项目即可。
在项目的目录查找依赖性时,会忽略IDE解决方案文件,而是去查找Build.cs文件,如果没有该文件就不会被UBT发现,进而不会被编译。

创建项目

在Source文件夹下创建一个新的文件夹,该文件夹为一个新的GamePlay模块,在该文件夹下添加Name.Bulid.cs文件。
image

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文件夹中。
image
image