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
大佬的模組配置總結2(較詳細):https://blog.csdn.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中加上需要編譯的模組後才能看到效果。