モジュール は Unreal Engine (UE) の構成要素です。UE は多数のモジュールの集合として実装されており、ゲームではそれらを増強する独自のモジュールが提供されます。各モジュールでは一連の機能がカプセル化されており、他のモジュールで使用できるようにパブリック インターフェースおよびコンパイル環境 (マクロ、インクルード パスなど) が提供されます。
モジュールは、拡張子が .build.cs である C# ソース ファイルで宣言されており、プロジェクトの「Source」ディレクトリ内に格納されています。モジュールに属する C++ ソース コードは、同じディレクトリ内またはサブディレクトリ内の .build.cs ファイルに格納されています。各 .build.cs ファイルでは、ModuleRules 基本クラスから派生したクラスが宣言されており、そのコンストラクタからどのようにビルドされるかを制御するプロパティが設定されています。これらの .build.cs ファイルは、Unreal Build Tool (UBT) によってコンパイルされ、全体的なコンパイル環境を決定するように構成されています。
.build.cs ファイルの一般的な構造は次のとおりです。
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule : ModuleRules
{
public MyModule(ReadOnlyTargetRules Target) : base(Target)
{
// Properties and settings go here
}
}
読み取り専用プロパティ
$ IsPlugin (Boolean):このモジュールがプラグインに含まれていれば、true が返されます。
$ HasPackageOverride (Boolean):このモジュールでオーバーライド タイプが指定されていれば、true が返されます。
$ AutoSdkDirectory (String):アクティブなホスト プラットフォーム用の「AutoSDK」ディレクトリ。
$ EngineDirectory (String):現在のエンジンのディレクトリ。
$ PluginDirectory (String):このプラグインが置かれているディレクトリのプロパティ。サードパーティの依存関係のパスを追加する場合に有用です。
$ ModuleDirectory (String):このモジュールが置かれているディレクトリのプロパティ。サードパーティの依存関係のパスを追加する場合に有用です。
$ TestsDirectory (String):モジュールの低レベル テスト ディレクトリ「Tests」が返されます。
$ BuildOrderSettings (SourceFilesBuildOrderSettings):モジュールのソース ファイルに対するコンパイル順序オーバーライド ルール (オプション)。
$ IsVcPackageSupported (Boolean):ビルド コンフィギュレーションで VcPkg がサポートされているかどうかが返されます。
読み取り/書き込みプロパティ
$ Type (ModuleType):モジュールのタイプ。
$ BinariesSubFolder (String):ダイナミックリンク ライブラリ (DLL) のビルド時にこのモジュールが配置される、「Binaries/PLATFORM」フォルダのサブフォルダ。この値は、TargetPlatform や ShaderFormat などのモジュールの検索で見つかるモジュールでのみ使用します。モジュールを見つけ出すときに FindModule が使用されていない場合、これらのモジュールは見つかりません。
$ PrivatePCHHeaderFile (String):このモジュールの明示的なプライベート プリコンパイル済みヘッダ (PCH)。これが指定されていると、このモジュールが共有 PCH を使用しないことを意味します。
$ SharedPCHHeaderFile (String):このモジュールによって提供される共有 PCH のヘッダ ファイル名。パブリック C++ ヘッダ ファイルの有効な相対パスである必要があります。これは、他の多数の C++ モジュールでインクルードされるヘッダ ファイルに対してのみ設定します。
$ ShortName (String):このモジュールの中間ディレクトリおよび中間ファイルの代替名を指定します。パスの長さの制限に達している場合に便利です。
$ bTreatAsEngineModule (Boolean):このモジュールをエンジン モジュールとして扱うかどうかを指定します (例:エンジン定義を使用している、PCH である、DebugGame コンフィギュレーションで最適化を有効にしてコンパイルされている)。作成元のルール アセンブリに基づいてデフォルトに初期化されます。
$ bDeterministic (Boolean):決定的コンパイル用のフラグを設定します (実験的機能であり、完全にはサポートされていません)。決定的リンクは TargetRules で制御されています。
$ bUseRTTI (Boolean):ランタイム タイプ情報を使用します。
$ bUseAVX (Boolean):SSE または AVX 組み込み関数が使用されているかどうかに関係なく、AVX 命令がサポートされているプラットフォームでは AVX 命令を生成するようにコンパイラに指示します。なお、これを有効にすると、PC プラットフォームの最小要件が変わり、生成される実行可能ファイルは、AVX がサポートされていないマシンではクラッシュします。
$ bEnableBufferSecurityChecks (Boolean):バッファ セキュリティ チェックを有効にします。重大なセキュリティ リスクが回避されるため、通常は有効にします。
$ bEnableExceptions (Boolean):例外処理を有効にします。
$ bEnableObjCExceptions (Boolean):Objective-C の例外処理を有効にします。
$ bEnableUndefinedIdentifierWarnings (Boolean):#if 式で使用されている未定義の識別子に対する警告を有効にします。
$ StaticAnalyzerCheckers (HashSetclang -Xclang -analyzer-checker-help を実行することでも取得でき、clang -Xclang -analyzer-checker-help-alpha を実行すると、実験段階のチェッカーの一覧を取得できます。
$ StaticAnalyzerDisabledCheckers (HashSetStaticAnalyzerCheckers が指定されている場合は使用されません。これは Clang でのみサポートされています。これは、無効になっているデフォルト チェッカーである、deadcode.DeadStores および security.FloatLoopCounter をオーバーライドします。チェッカーの一覧については、Clang ドキュメントの「Clang Checkers」を参照してください。チェッカーの一覧は clang -Xclang -analyzer-checker-help を実行することでも取得でき、clang -Xclang -analyzer-checker-help-alpha を実行すると、実験段階のチェッカーの一覧を取得できます。
$ StaticAnalyzerAdditionalCheckers (HashSetStaticAnalyzerCheckers が指定されている場合は使用されません。これは Clang でのみサポートされています。チェッカーの一覧については、Clang ドキュメントの「Clang Checkers」を参照してください。チェッカーの一覧は clang -Xclang -analyzer-checker-help を実行することでも取得でき、clang -Xclang -analyzer-checker-help-alpha を実行すると、実験段階のチェッカーの一覧を取得できます。
$ bMergeUnityFiles (Boolean):高速コンパイルのために、モジュールおよび生成された unity ファイルをマージするかどうかを指定します。
$ MinSourceFilesForUnityBuildOverride (Int32):モジュールに対して unity ビルドをアクティブ化する前にビルドする、このモジュール内のソース ファイルの数。「-1」以外の値に設定すると、MinGameModuleSourceFilesForUnityBuild で制御されているデフォルト設定がオーバーライドされます。
$ MinFilesUsingPrecompiledHeaderOverride (Int32):ゼロ以外の値であれば、BuildConfiguration.MinFilesUsingPrecompiledHeader がオーバーライドされます。
$ bBuildLocallyWithSNDBS (Boolean):モジュールで #import が使用されているため、SN-DBS を使用してコンパイルする場合はローカルにビルドする必要があります。
$ IsRedistributableOverride (Nullable
$ bLegalToDistributeObjectCode (Boolean):公開可能ではない (CarefullyRedist、NotForLicensees、NoRedist など) モジュールのコードや依存関係がこのモジュールに含まれていても、このモジュールからの出力を公開できるかどうかを指定します。これは、ソース コードではなくバイナリ ファイルのリリースを計画している場合に使用します。
$ AllowedRestrictedFolders (List
$ AliasRestrictedFolders (Dictionary
$ bEnforceIWYU (Boolean):PCHUsage が ExplicitOrSharedPCH に設定されている場合に、「include-what-you-use」(IWYU) ルールが適用され、モノリシック ヘッダ (Engine.h、UnrealEd.h など) が使用されている場合に警告が表示され、該当するヘッダがソース ファイルで最初にインクルードされていることがチェックされます。
$ bAddDefaultIncludePaths (Boolean):デフォルトのインクルード パスすべて (「Source/Classes」フォルダ、「Source/Public」内のサブフォルダなど) をモジュールに追加するかどうかを指定します。
$ bIgnoreUnresolvedSymbols (Boolean):モジュール内のダングリング (未解決の外部参照など) シンボルを無視するかどうかを指定します。
$ bPrecompile (Boolean):このモジュールがプリコンパイルされるかどうかを指定します。デフォルトでは、ターゲットの bPrecompile フラグの値が使用されます。モジュールがプリコンパイルされないようにするには、このフラグをクリアします。
$ bUsePrecompiled (Boolean):プリコンパイルされたデータをこのモジュールで使用するかどうかを指定します。インストールされているアセンブリから作成されたモジュールでは、常に true です。
$ bAllowConfidentialPlatformDefines (Boolean):このモジュールが PLATFORM_XXXX (XXXX は機密プラットフォーム名) スタイルの定義を使用できるかどうかを指定します。これは、エンジンまたは他の共有コードで、#if PLATFORM_XXXX ブロック内の機密情報が漏れないようにするために使用されます。ただし、ライセンシーのゲーム コードではそれが考慮される場合があります。
$ PublicIncludePathModuleNames (List
$ PublicDependencyModuleNames (List
$ PrivateIncludePathModuleNames (List
$ PrivateDependencyModuleNames (List
$ CircularlyReferencedDependentModules (List
$ PublicSystemIncludePaths (List
$ PublicIncludePaths (ListPublic」フォルダですべてのファイルが見つかるため、この設定は不要です)。
$ InternalncludePaths (ListInternal」フォルダですべてのファイルが見つかるため、この設定は不要です)。
$ PrivateIncludePaths (ListPrivate」パスへのインクルードが 1 つあり、相対パスを使用しない場合はさらに多くなります)。
$ PublicSystemLibraryPaths (List.lib ファイルが置かれているディレクトリ) のリスト。外部 (サードパーティ) モジュールでは、代わりに「PublicAdditionalLibaries」を使用してください。
$ PrivateRuntimeLibraryPaths (List.so ファイルなど) 検索パスのリスト。
$ PublicRuntimeLibraryPaths (List.so ファイルなど) 検索パスのリスト。
$ PublicAdditionalLibraries (List.lib ファイルの拡張子付きの名前) のリスト。通常は外部 (サードパーティ) モジュールに使用されます。
$ PublicPreBuildLibraries (List.lib ファイルの拡張子付きの名前)。通常は、引き続きビルドされるが TargetRules.PreBuildSteps または TargetRules.PreBuildTargets を使用している追加のターゲットに使用されます。
$ PublicSystemLibraries (List.lib ファイルを参照する必要がある場合は、代わりに PublicAdditionalLibraries を使用します。
$ PublicFrameworks (List
$ PublicWeakFrameworks (List
$ PublicAdditionalFrameworks (List
$ AdditionalBundleResources (List
$ TypeLibraries (List
$ PublicDelayLoadDLLs (List
$ PrivateDefinitions (List
$ PublicDefinitions (List
$ DynamicallyLoadedModuleNames (List
$ RuntimeDependencies (RuntimeDependencyList):このモジュールがランタイム時に依存するファイルのリスト。これらのファイルは、ターゲットとともにステージングされます。
$ AdditionalPropertiesForReceipt (ReceiptPropertyList):ビルド レシートに追加される追加プロパティのリスト。
$ PrecompileForTargets (PrecompileTargetsType):このモジュールをどのターゲット用にプリコンパイルするかを指定します。
$ ExternalDependencies (List.Build.cs ファイルを基準として解決されます。
$ SubclassRules (List
$ bRequiresImplementModule (NullableIMPLEMENT_MODULE マクロが実装されることを、このモジュールが必要とするかどうかを指定します。ほとんどの UE モジュールでは、IMPLEMENT_MODULE マクロを使用して他のグローバル オーバーロード (GMalloc にフォワードする new/delete 演算子など) を行っているため、これを有効にする必要があります。
$ bValidateCircularDependencies (Boolean):循環依存関係を許可リストに基づいて検証するかどうかを指定します。循環モジュール依存関係があると、ビルドに時間がかかります。このオプションを無効にしないことを強くお勧めします。このオプションは、常に許可リストに基づいて検証されるエンジン モジュールでは無視されます。
$ CppStandard (CppStandardVersion):このモジュールのコンパイルにどの規格を使用するかを指定します。
$ CStandard (CStandardVersion):このモジュールのコンパイルにどの規格を使用するかを指定します。
$ ModuleSymbolVisibility (SymbolVisibility):シンボルの可視性を制御します。
$ Name (String):このモジュールの名前。
$ OverridePackageType (PackageOverrideType):別のパッケージ フラグを設定するモジュールのオーバーライドされたタイプ。プラグインの一部であるモジュールでは、.uplugin ファイルですでに設定されているため、使用できません。
$ OptimizeCode (CodeOptimization):このモジュールのコードを最適化する必要がある場合に指定します。
$ PCHUsage (PCHUsageMode):このモジュールで使用するプリコンパイル済みヘッダを指定します。
$ DefaultBuildSettings (BuildSettingsVersion):どのエンジン バージョンのビルド設定をデフォルトで使用するかを指定します。
$ IncludeOrderVersion (EngineIncludeOrderVersion):このモジュールのコンパイル時にどのバージョンのインクルード順序を使用するかを指定します。コマンドラインまたはモジュールのルールで -ForceIncludeOrder を使用してオーバーライドできます。
$ ShadowVariableWarningLevel (WarningLevel):シャドウ変数に対する警告をどのように処理するかを指定します。
$ UnsafeTypeCastWarningLevel (WarningLevel):安全でない暗黙の型キャスト (double->float、int64->int32 など) に対する警告をどのように処理するかを指定します。
$ bUseUnity (Boolean):unity ビルドが有効になっている場合に、これを使用すると、この特定のモジュールが Unity を使用してビルドされるかどうかをオーバーライドできます。これは、BuildConfiguration.cs でのモジュールごとにコンフィギュレーションを使用して設定されます。
$ bLegacyPublicIncludePaths (Boolean):このモジュールが、インクルードされている他のモジュールのヘッダを、その「Public」フォルダのルートを基準とした相対パスとして修飾するかどうかを指定します。これにより、コンパイラに渡す必要がある検索パスの数が減るため、パフォーマンスが向上し、コンパイラのコマンドラインが短くなります。