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
      • MyModule.Build.cs

具体流程参考官方文档:https://docs.unrealengine.com/zh-CN/Programming/Modules/Gameplay/index.html
大佬的模块配置总结1:https://blog.csdn.net/qq_29523119/article/details/89897113
大佬的模块配置总结2(较详细):https://blog.csdn.net/pp1191375192/article/details/103139304

注意事项:

  1. 新建模块不要忘记需要配置和修改的地方。
  2. 每个模块的类都需要在class后加上[MODULE]_API,声明为DLL导出类。
  3. 注意模块之间的依赖,添加的自定义游戏模块不应该依赖主游戏模块。

多个模块之间的依赖

组织模块的描述文件有以下几种:

  • [ProjectName].uproject文件:项目描述文件,里面描述了Module的类型,加载时机等。
  • [PluginName].uplugin文件:插件描述文件,描述了插件中的Module,格式与 .uproject文件相同。
  • [ModuleName].build.cs文件:主要描述所在Module的编译环境。
  • [ProjectName].Target.cs文件:游戏的编译配置文件,描述游戏依赖的Module
  • [ProjectName]Editor.Target.cs文件:编辑器编译配置文件,描述依赖的Module
    模块描述文件

下面对这些文件进行说明:

[ProjectName].uproject文件

以Json格式描述项目信息,对于自定义的游戏模块,需要在这个文件中"Modules"下进行对应配置。
uproject

其中:

  • “Type”:加载模块的适用场景,“Runtime”表示除独立程序以外的所有目标。
  • “LoadingPhase”:模块在何时被加载,“Default”表示在引擎初始化之前,游戏模块加载之后。
  • “AdditionalDependencies”:加载之前的附加依赖项。

[ProjectName].uplugin文件

以Json格式描述插件信息,与[ProjectName].uproject文件对模块的描述信息相同。
uproject

[ModuleName].build.cs文件

C#文件,表述所在模块的编译配置信息,比如包含目录、依赖模块、依赖库等,提供给UnrealBuildTool使用。
模块描述文件
常用需要配置的变量如下:

  • PublicDependencyModuleNames: 此模块所依赖的模块,并暴露给依赖此模块的其它模块,会链接。
  • PrivateDependencyModuleNames :私有依赖模块名称列表,不会暴露给依赖此模块的其它模块,会链接。
  • PrivateIncludePaths:配置模块中所需要头文件的包含目录。
    如何依赖某个第三方库,通常需要配置:
  • PublicAdditionalLibraries :所需要依赖第三方库的.lib文件。
  • PublicDelayLoadDLLs :延迟加载的Dll。
  • RuntimeDependencies:运行时以来的文件,比如.dll文件。

变量之前的Public和Private通常表示模块的访问修饰符,三个模块以上才有作用,表示间接依赖模块只能通过Public传递。

[ProjectName][Editor].Target.cs文件

UnrealBuildTool会使用.Target.cs文件分析不同构建目标的设置,比如一般新建项目后打开是Development Editor,则需要在[ProjectName]Editor.Target.cs中加上需要编译的模块后才能看到效果。


版权声明:本文为weixin_43844254原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。