1. 程式人生 > 實用技巧 >UE4中的模組(module)介紹

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: 這些是我們的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中加上需要編譯的模組後才能看到效果。