Module
概要モジュールの基本構造モジュールの依存関係モジュールスコープモジュールAPIモジュールの依存設定インクルードパスの制御デフォルトインクルードパス設定追加のインクルードパス設定モジュールの追加例1. ゲームモジュールフォルダ同階層にエディタモジュールフォルダを作成2. エディタモジュールフォルダ内に以下のファイルを作成3. ゲームモジュールのTarget.csでエディタモジュールをビルド対象に設定4. プロジェクトのuprojectでエディタモジュールをロード対象に設定
概要
コードやアセットの機能的なまとまりを分離して構成する仕組み。
これにより、機能間の結合を抑え、プロジェクト全体の保守性と将来的な拡張余地を確保している。
モジュールのビルドプロセスは、「Unreal Build Tool」によって制御される。
モジュールの基本構造
「Source」以下にある、モジュール名で分けられた各フォルダが、1つのモジュールを構成する単位となる。
- Source
- ModuleA
- ModuleA.Build.cs
- ModuleA.h
- ModuleA.cpp
- …
- ModuleB
- ModuleB.Build.cs
- ModuleB.h
- ModuleB.cpp
- …
ビルド対象に含めるには、「Target.cs」で「ExtraModuleNames」に対象としたいモジュールを追加する。
ロード対象に含めるには、「uproject」で「Modules」に対象としたいモジュールを追加する。
モジュールの依存関係
モジュールスコープ
「UnrealBuildTool」プロジェクトの「RulesCompiler.cs」に記載がある。
- Engine
- Engine/SourceのDeveloper、Editor、Runtime、ThirdParty以下に配置されたもの
- Engine Plugins
- Engine/Plugins以下に配置されたもの
- Engine Programs
- Engine/Source/Programs以下に配置されたもの
- Marketplace
- Engine/Plugins/Marketplace以下に配置されたもの
- Project
- Project/SourceやProject/Plugins以下に配置されたもの
- uproject内でAdditionalPluginDirectoriesによって追加されたプラグイン
- Plugin
- 単一のプラグイン
「Engine」が最上位のモジュールとなり、上位モジュールが下位モジュールに依存することはない。
「Unreal Build Tool」でのビルドは、上位モジュールから順に行われる。
モジュールAPI
クラスや関数の宣言の前に「モジュール名_API」マクロを追加することで、その機能をモジュール外に公開することができる。
その機能が、自身のモジュールのみで参照され、他モジュールから依存されないことが分かっている場合は省略してもよい。
モジュールの依存設定
「Build.cs」の「DependencyModuleNames」にモジュール名を追加することで、該当モジュールの機能を使用することができる。
例えば、以下のような依存関係があるとする。
- モジュールA
- モジュールB(Aに依存)
- モジュールC(Bに依存)
このとき、依存関係が他モジュールにどこまで伝わるかは、「Public」依存か、「Private」依存かによって異なる。
- PublicDependencyModuleNames
- 依存関係を他モジュールにも公開する
- BがAにPublic依存し、CがBに依存している場合に、CからAにもアクセスできる
- PrivateDependencyModuleNames
- 依存関係を他モジュールに公開しない
- BがAにPrivate依存し、CがBに依存している場合に、CからAにはアクセスできない
ゲームモジュールは、他モジュールから依存されることがほぼないため「PrivateDependencyModuleNames」を使うのが基本となる。
インクルードパスの制御
デフォルトインクルードパス設定
「UnrealBuildTool」によって、特定のフォルダがデフォルトインクルードパスとして追加される。
- Public
- 他モジュールにも公開する
- Private
- 他モジュールに公開されず、自身のモジュールからのみアクセス可能となる
ほかにも、ClassesやInternalがあるが基本的に使わないので省略する。
また、ゲームモジュールなど、将来的にも他モジュールから依存されることがないものは、「public」フォルダや「private」フォルダを使用する必要はない。
追加のインクルードパス設定
「Build.cs」の「PrivateIncludePaths」や「PublicIncludePaths」に追加する。
(例)プロジェクトのソースコードをプロジェクト絶対パスで指定
モジュールの追加例
Sandboxプロジェクトにエディタモジュールを追加する
1. ゲームモジュールフォルダ同階層にエディタモジュールフォルダを作成
- Source
- Sandbox
- SandboxEditor ←ここに作成