UE4中的模块(module)介绍
简介
官方文档:
https://docs.unrealengine.com/zh-CN/Programming/Modules/Gameplay/index.html
实验版本:UE 4.25
一个UE4游戏项目中包含引擎内容和游戏内容,我们可以使用引擎代码、引擎插件代码、游戏代码、游戏插件代码来实现游戏中的各种功能,UE4使用模块的概念(Module)来进行代码组织,从而将不同的功能划分在比较小的粒度当中。
新建一个MyProject的UE4项目,打开VS解决方案文件(.sln),可以发现由Engine和Games两个文件夹组成,分别包含UE4项目和MyProject项目(游戏项目),每个项目都是由Plugin文件夹和Source文件夹中的多个模块组织而成,这些模块最终会被编译为DLL文件。
模块的创建
新建一个C++游戏项目(通过C++游戏模板或通过蓝图游戏模板添加C++代码),会在游戏项目中自动生成一个与项目同名的游戏主模块。
如果要创建一个其它的游戏模块,至少要包含一个编译文件 (*.Build.cs),以及模块对应的 .h文件和 .cpp文件。头文件必须位于模块目录的 Public 文件夹中,cpp文件必须位于模块目录的 Private文件夹中。目录结构大概如下图所示:
- MyProject项目
- Source
- MyProject
- MyModule
- Public
- MyModule.h
- Private
- MyModule.cpp
- Public
- MyModule.Build.cs
- Source
具体流程参考官方文档:https://docs.unrealengine.com/zh-CN/Programming/Modules/Gameplay/index.html
大佬的模块配置总结1:https://blog.****.net/qq_29523119/article/details/89897113
大佬的模块配置总结2(较详细):https://blog.****.net/pp1191375192/article/details/103139304
注意事项:
- 新建模块不要忘记需要配置和修改的地方。
- 每个模块的类都需要在class后加上[MODULE]_API,声明为DLL导出类。
- 注意模块之间的依赖,添加的自定义游戏模块不应该依赖主游戏模块。
多个模块之间的依赖
组织模块的描述文件有以下几种:
- [ProjectName].uproject文件:项目描述文件,里面描述了Module的类型,加载时机等。
- [PluginName].uplugin文件:插件描述文件,描述了插件中的Module,格式与 .uproject文件相同。
- [ModuleName].build.cs文件:主要描述所在Module的编译环境。
- [ProjectName].Target.cs文件:游戏的编译配置文件,描述游戏依赖的Module
- [ProjectName]Editor.Target.cs文件:编辑器编译配置文件,描述依赖的Module
下面对这些文件进行说明:
[ProjectName].uproject文件
以Json格式描述项目信息,对于自定义的游戏模块,需要在这个文件中"Modules"下进行对应配置。
其中:
- “Type”:加载模块的适用场景,“Runtime”表示除独立程序以外的所有目标。
- “LoadingPhase”:模块在何时被加载,“Default”表示在引擎初始化之前,游戏模块加载之后。
- “AdditionalDependencies”:加载之前的附加依赖项。
[ProjectName].uplugin文件
以Json格式描述插件信息,与[ProjectName].uproject文件对模块的描述信息相同。
[ModuleName].build.cs文件
C#文件,表述所在模块的编译配置信息,比如包含目录、依赖模块、依赖库等,提供给UnrealBuildTool使用。
常用需要配置的变量如下:
- PublicDependencyModuleNames: 这些是我们的public文件夹所需的模块。自动包含所依赖模块的public/private的包含目录。需要链接。
- PrivateDependencyModuleNames :私有依赖模块名称列表。 这些是我们的private文件夹代码所依赖的模块,但我们的public文件中不会有对这些模块的依赖,需要链接。
- PrivateIncludePaths:表示本模块中Private文件夹中哪些文件夹是包含目录。(PublicIncludePaths一般不用配置,默认启用,Public文件夹中都为暴露给其它模块的包含目录)。
如何依赖某个第三方库,通常需要配置: - PublicAdditionalLibraries :所需要依赖第三方库的.lib文件。
- PublicDelayLoadDLLs :延迟加载的Dll。
- RuntimeDependencies:运行时以来的文件,比如.dll文件。
变量之前的Public和Private通常表示与本模块中的public文件夹还是private文件夹相关。
[ProjectName][Editor].Target.cs文件
UnrealBuildTool会使用.Target.cs文件分析不同构建目标的设置,比如一般新建项目后打开是Development Editor,则需要在[ProjectName]Editor.Target.cs中加上需要编译的模块后才能看到效果。