mcpField
U
ue-module-build-system

ue-module-build-system

github.com/quodsoler開発4191.3k 回インストール4 週間前に更新
リポジトリ

ue-module-build-system について

Unreal Engine 5.8 開発者向けのスキルです。UnrealBuildTool のモジュール・ターゲットルール、プロジェクトやプラグインの記述子、モジュール登録を扱います。依存関係の設定、作成手順、ビルドエラーの診断も案内します。

主な機能

  1. 01`Build.cs` の依存関係とインクルードパスの解説
  2. 02`Target.cs` とビルド設定の構成
  3. 03`.uproject` と `.uplugin` の設定
  4. 04モジュールやプラグインの作成・登録
  5. 05UBT、UHT、リンカーエラーの診断

活用シーン

  1. 01モジュール依存関係とヘッダー参照の調整
  2. 02UE モジュールまたはプラグインの作成
  3. 03ビルド、リンク、モジュール読み込み障害の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/quodsoler/unreal-engine-skills --skill ue-module-build-system

インストール後、Claude Code で/ue-module-build-systemを入力して読み込まれたか確認します。

同梱ファイルreferences/build-cs-reference.mdreferences/common-build-errors.md

詳細

UE モジュールとビルドシステム

対象エンジン:UE 5.8。以下の API は 5.8 のヘッダーと UnrealBuildTool のソースコードで検証済みです。古い形式は「非推奨 — 使用しないでください」に記載しています。

このスキルでは、UnrealBuildTool(UBT)の ModuleRules(*.Build.cs)と TargetRules(*.Target.cs)、.uproject および .uplugin ディスクリプター、モジュール登録(Modules/ModuleManager.h の IModuleInterface と IMPLEMENT_MODULE、モジュール Core)、プラグイン検出(Interfaces/IPluginManager.h の IPluginManager、モジュール Projects)、ならびにこれらのファイルが原因となるコンパイラー、リンカー、UHT、UBT のエラーについて扱います。

コンテキスト

.agents/ue-project-context.md が存在する場合は読み込んでください(モジュール名、規約、有効なプラグイン、GAS/ネットワーク設定)。存在しなくても作業を中断しないでください。

リクエストとコードベースから対象領域を特定してください。2 つの妥当な解釈によって異なるコードが生成される場合に限り、質問してください。

リクエストの内容…参照先
既存の Build.cs における依存関係、インクルードパス、PCH、警告Build.cs の構造
Target.cs、BuildSettingsVersion、IncludeOrderVersion、ターゲットの種類Target.cs
.uproject、モジュールの Type、LoadingPhase、プラグインの有効化.uproject ファイル
モジュールの追加(IMPLEMENT_MODULE、モジュールインターフェース、StartupModule)新しいモジュールの作成
プラグインの追加(.uplugin、ランタイムとエディターモジュール、依存関係)プラグインの作成
「型 X を使うには、どのモジュールを追加すればよいですか?」この型を提供するモジュール
LNK2019、C1083、UHT、UBT、または実行時のモジュール読み込みエラービルドエラーの解決

Build.cs の構造

各モジュールには、Public/ フォルダーと Private/ フォルダーの隣に <ModuleName>.Build.cs があります。クラス名はモジュール名と一致する必要があります。

// Source/MyGame/MyGame.Build.cs
using UnrealBuildTool;

public class MyGame : ModuleRules
{
    public MyGame(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

        // Types from these modules appear in this module's Public/ headers
        PublicDependencyModuleNames.AddRange(new string[]
        {
            "Core",
            "CoreUObject",
            "Engine",
            "InputCore",
            "EnhancedInput",
        });

        // Used only inside Private/ .cpp files; not re-exported downstream
        PrivateDependencyModuleNames.AddRange(new string[]
        {
            "Slate",
            "SlateCore",
            "UMG",
        });

        // Loaded through FModuleManager at runtime, never linked
        DynamicallyLoadedModuleNames.Add("OnlineSubsystem");
    }
}
Public と Private の依存関係
フィールド使用する場合
PublicDependencyModuleNamesモジュールの型が、いずれかの Public/ ヘッダー(基底クラス、メンバー、パラメーター、戻り値の型、UPROPERTY)に現れる場合です。下流モジュールはインクルードパスを継承します。
PrivateDependencyModuleNamesモジュールを Private/ の .cpp ファイルまたはプライベートヘッダーでのみ使用する場合です。
PublicIncludePathModuleNames / PrivateIncludePathModuleNamesモジュールのヘッダー(前方宣言、インライン型)が必要ですが、そのモジュールのシンボルにはリンクしない場合です。
DynamicallyLoadedModuleNames自分で FModuleManager::Get().LoadModule(...) を呼び出す場合です。UBT はモジュールがビルドされることだけを保証します。

まずはプライベートにし、パブリックヘッダーで必要になった場合にのみパブリックへ変更してください。すべてをパブリックにすると、下流のすべてのモジュールでコンパイル時間が増加します。

インクルードパスと IWYU

UBT は Public/、Internal/、Private/ を自動的に検出します。PublicIncludePaths/PrivateIncludePaths が必要なのは、追加のサブフォルダーがある場合だけです。BuildSettingsVersion.V2 以降では bLegacyPublicIncludePaths が false になるため、他のモジュールのヘッダーは、そのモジュールの Public/(または Classes/)ルートからの相対パスで記述します。

// Source/MyGame/Private/MyActor.cpp
#include "MyActor.h"                          // own header first
#include "GameFramework/Actor.h"              // Engine/Classes/GameFramework/Actor.h
#include "Engine/World.h"                     // only what this file uses directly
#include "GameFramework/PlayerController.h"

IWYUSupport のデフォルトは IWYUSupport.Full で、UnrealBuildTool -Mode=IWYU によってモジュールのインクルードを書き換えられます。手動で保守するコードでは IWYUSupport = IWYUSupport.KeepAsIs を設定してください。

API エクスポートマクロ

UBT は <MODULENAME>_API(モジュール名を大文字にして _API を付けたもの)を定義します。モジュールのコンパイル時には DLLEXPORT、インポート側では DLLIMPORT となり、モノリシックビルドでは空になります。他のモジュールから参照されるものには、このマクロが必要です。

// Source/MyGame/Public/MyGameTypes.h
#pragma once
#include "CoreMinimal.h"

class MYGAME_API FMyGameTypes
{
public:
    void DoSomething();
};

MYGAME_API void MyGameFreeFunction();

エンジンヘッダーでは、ファイルの先頭で #define UE_API CORE_API としてこれをラップし、末尾で #undef UE_API を指定しています(Async/Mutex.h)。これはエンジン専用の規約です。プロジェクトコードでは MYGAME_API を直接記述します。他のモジュールから参照されるクラスに MYGAME_API がないことは、LNK2019 の最も一般的な原因です。

警告とコンパイラーフラグ
bWarningsAsErrors = true;
CppCompileWarningSettings.ShadowVariableWarningLevel = WarningLevel.Error;   // MSVC C4456/C4458/C4459
CppCompileWarningSettings.UnsafeTypeCastWarningLevel = WarningLevel.Warning; // MSVC C4244/C4838
CppCompileWarningSettings.DeprecationWarningLevel = WarningLevel.Error;      // MSVC C4996 from UE_DEPRECATED

bEnableExceptions = false;               // default; enable only for third-party code that throws
bUseRTTI = false;                        // default; enable only for third-party dynamic_cast/typeid
CppStandard = CppStandardVersion.Cpp20;  // per-module override; the engine default is Cpp20
bUseUnity = false;                       // opt this module out of unity builds

// Engine-bundled third-party libraries (Engine/Source/ThirdParty/<Name>/<Name>.Build.cs)
AddEngineThirdPartyPrivateStaticDependencies(Target, "zlib", "OpenSSL", "libcurl");

すべての ModuleRules フィールド、RuntimeDependencies API、プラットフォーム条件、エンジンモジュールの完全な一覧については、references/build-cs-reference.md を参照してください。

Target.cs

Source/MyGame.Target.cs と Source/MyGameEditor.Target.cs です。クラス名は <FileName>Target にする必要があります。そうしないと、UBT は「Expecting to find a type to be declared in a target rules named 'MyGameTarget'」というエラーで失敗します。

// Source/MyGame.Target.cs
using UnrealBuildTool;
using System.Collections.Generic;

public class MyGameTarget : TargetRules
{
    public MyGameTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Game;
        DefaultBuildSettings = BuildSettingsVersion.V7;
        IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
        ExtraModuleNames.Add("MyGame");
    }
}

Source/MyGameEditor.Target.cs では、Type = TargetType.Editor; と ExtraModuleNames.AddRange(new string[] { "MyGame", "MyGameEditor" }); 以外は同じ本体を持つ MyGameEditorTarget を宣言します。

  • BuildSettingsVersion.V7 は 5.8 のプロジェクトテンプレートで出力される値です(Latest も V7 と同じです)。明示的な値を固定してください。Latest はエンジンをアップグレードするたびに意味が変わります。
  • EngineIncludeOrderVersion.Unreal5_8 は、削除された暗黙的なエンジンインクルードをコードで引き続き使用できるようにする UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_8 定義を選択します。Unreal5_1~Unreal5_5 は [Obsolete] でサポート対象外、Unreal5_6 は非推奨です。モジュールは ModuleRules.IncludeOrderVersion で上書きできます。
BuildSettingsVersion有効になる既定値
V2PCHUsage = UseExplicitOrSharedPCHs、bLegacyPublicIncludePaths = false
V3bLegacyParentIncludePaths = false
V4CppStandard の既定値が Cpp20 に変更、WindowsPlatform.bStrictConformanceMode = true
V5bValidateFormatStrings = true
V6WindowsPlatform.bStrictInlineConformance = true、UndefinedIdentifierWarningLevel = Error
V7(= Latest)ReturnTypeWarningLevel、DanglingWarningLevel、UnreachableCodeWarningLevel = Error
TargetTypeビルド内容
Gameスタンドアロンのゲーム実行ファイル
Editorエディターのビルド。Editor 型のモジュールを含みます
Clientサーバー専用コードを含まないネットワーククライアント
Serverレンダラーを含まない専用サーバー
Programスタンドアロンツール(bCompileAgainstEngine/bCompileAgainstCoreUObject の選択が必要です)

ビルド構成(UnrealTargetConfiguration):Debug、DebugGame(エンジンは最適化、ゲームは最適化なし)、Development(既定値)、Test、Shipping。便利なターゲットスイッチ:bUseUnityBuild、bUseLoggingInShipping、bUseChecksInShipping、bWithLiveCoding、LinkType = TargetLinkType.Monolithic、GlobalDefinitions/ProjectDefinitions、共有ビルド環境への違反(例:エディターターゲットによる定義の変更)を「無視する」ための bOverrideBuildEnvironment = true。

.uproject ファイル

{
    "FileVersion": 3,
    "EngineAssociation": "5.8",
    "Category": "",
    "Description": "",
    "Modules": [
        {
            "Name": "MyGame",
            "Type": "Runtime",
            "LoadingPhase": "Default",
            "AdditionalDependencies": [ "Engine", "AIModule", "UMG" ]
        },
        { "Name": "MyGameEditor", "Type": "Editor", "LoadingPhase": "Default" }
    ],
    "Plugins": [
        { "Name": "ModelingToolsEditorMode", "Enabled": true, "TargetAllowList": [ "Editor" ] },
        { "Name": "StateTree", "Enabled": true },
        { "Name": "MyPlugin", "Enabled": true, "Optional": true }
    ]
}

AdditionalDependencies は、このモジュールをビルドするための追加依存関係の一覧を記述子で指定するものです。プラグイン参照では、Name、Enabled、Optional、TargetAllowList/TargetDenyList、PlatformAllowList/PlatformDenyList、TargetConfigurationAllowList を指定できます。

モジュールの種類(ModuleHostType)
Type読み込まれる条件
RuntimeUE ランタイムを使用するすべてのターゲット(ゲームコードの既定値)
RuntimeNoCommandletコマンドレット以外のすべてのターゲット
RuntimeAndProgramすべてのターゲットまたはプログラム
CookedOnly/UncookedOnlyCook 済みビルドのみ/未 Cook(エディター、PIE)ビルドのみ — UncookedOnly は Blueprint ノード(K2Node)モジュールに使用する型です
Developer開発者ツールのサポートが有効な場合のみ(非推奨:DeveloperTool を使用してください)
DeveloperToolbBuildDeveloperTools が有効なすべてのターゲット
Editor/EditorNoCommandletエディターのみ/コマンドレットを除くエディター
EditorAndProgramエディターまたはプログラムのターゲット
Programプログラムのターゲットのみ
ServerOnly/ClientOnly/ClientOnlyNoCommandletサーバーのみ/クライアント、コマンドレット、エディター/クライアントとエディター
External自動では読み込まれず、参照のみ
読み込みフェーズ(ModuleLoadingPhase)
LoadingPhaseタイミング
EarliestPossibleプラグインを読み込めるようになった直後(GConfig が存在する状態)
PostConfigInit設定システムの直後。非常に低レベルなフックのみ
PostSplashScreenシステムのスプラッシュ画面の次に表示される最初の画面
PreEarlyLoadingScreenPostConfigInit の後、CoreUObject の初期化前
PreLoadingScreenロード画面が表示される前
PreDefaultDefault の直前。アセットタイプや、ほかのモジュールが必要とするカスタムクラス
Defaultエンジンの初期化中、ゲームモジュールの読み込み後(大半のモジュール)
PostDefaultDefault の直後
PostEngineInitエンジンの初期化完了後
None自動読み込みされません。FModuleManager::Get().LoadModule() を使用します

新しいモジュールの作成

Source/
  MyModule/
    MyModule.Build.cs
    Public/
      IMyModule.h           (public module interface, optional)
      MyModuleTypes.h
    Private/
      MyModule.cpp          (IMPLEMENT_MODULE lives here)
      MyModuleTypes.cpp
// Source/MyModule/Public/IMyModule.h
#pragma once
#include "Modules/ModuleManager.h"

class IMyModule : public IModuleInterface
{
public:
    static IMyModule& Get()
    {
        return FModuleManager::LoadModuleChecked<IMyModule>("MyModule");
    }

    static bool IsAvailable()
    {
        return FModuleManager::Get().IsModuleLoaded("MyModule");
    }
};
// Source/MyModule/Private/MyModule.cpp
#include "IMyModule.h"

class FMyModule : public IMyModule
{
public:
    virtual void StartupModule() override
    {
        // Load dependent modules, register settings, delegates, asset types
    }

    virtual void ShutdownModule() override
    {
        // Unregister in reverse order; dependencies loaded in StartupModule are still alive
    }
};

IMPLEMENT_MODULE(FMyModule, MyModule)
マクロ(Modules/ModuleManager.h)用途
IMPLEMENT_MODULE(FMyModule, MyModule)ゲームプレイクラスを含まないモジュール(ツール、エディター、ライブラリ)
IMPLEMENT_GAME_MODULE(FMyModule, MyModule)ゲームプレイの UCLASS を含むモジュール。IMPLEMENT_MODULE に展開されます
IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, MyGame, "MyGame")ゲームごとに1つだけ指定します。モノリシックビルドでは、UE_PROJECT_NAME からプロジェクト名を定義します。3番目の引数は DEPRECATED_GameName(ModuleManager.h:1100)で、使用されません

FDefaultModuleImpl と FDefaultGameModuleImpl は、起動ロジックを持たないモジュール向けの既成クラスです。FDefaultGameModuleImpl::IsGameModule() は true を返すため、ホットリロードツールはゲームコードとして扱います。2番目のマクロ引数は Build.cs のモジュール名と一致している必要があります。モノリシック形式とモジュラー形式の両方で、マクロは UE_STATIC_ASSERT_WARN を使って UE_MODULE_NAME と照合します(ModuleManager.h:950、:968)。このチェックは「Module name mismatch」という非推奨形式の 警告 を出しますが、エラーになるのは bWarningsAsErrors の場合のみです。その他の IModuleInterface フック:PreUnloadCallback()、PostLoadCallback()、SupportsDynamicReloading()、SupportsAutomaticShutdown()。

続いて、モジュールを3か所に登録します。.uproject(または .uplugin)の Modules 配列、モジュールをビルドする各 Target.cs の ExtraModuleNames、およびそのモジュールを使用するモジュールの依存関係リストです。エディター専用モジュール("Type": "Editor"、if (Target.bBuildEditor) 内の PrivateDependencyModuleNames.Add("UnrealEd"))については、ue-editor-tools で説明しています。

プラグインの作成

Plugins/
  MyPlugin/
    MyPlugin.uplugin
    Resources/Icon128.png
    Content/                    (only when CanContainContent is true)
    Source/
      MyPlugin/
        MyPlugin.Build.cs
        Public/  Private/MyPluginModule.cpp
      MyPluginEditor/
        MyPluginEditor.Build.cs
        Public/  Private/MyPluginEditorModule.cpp
{
    "FileVersion": 3,
    "Version": 1,
    "VersionName": "1.0",
    "FriendlyName": "My Plugin",
    "Description": "Does something useful.",
    "Category": "Gameplay",
    "CreatedBy": "MyStudio",
    "CreatedByURL": "",
    "DocsURL": "",
    "MarketplaceURL": "",
    "SupportURL": "",
    "EnabledByDefault": false,
    "CanContainContent": true,
    "IsBetaVersion": false,
    "IsExperimentalVersion": false,
    "Installed": false,
    "Modules": [
        { "Name": "MyPlugin", "Type": "Runtime", "LoadingPhase": "PreDefault" },
        { "Name": "MyPluginEditor", "Type": "Editor", "LoadingPhase": "Default", "PlatformAllowList": [ "Win64", "Mac", "Linux" ] }
    ],
    "Plugins": [
        { "Name": "GameplayAbilities", "Enabled": true },
        { "Name": "StateTree", "Enabled": true, "Optional": true }
    ]
}
  • 依存先のモジュールを含むプラグインはすべて Plugins に宣言してください。宣言しない場合、UBT は「Plugin 'MyPlugin' does not list plugin 'X' as a dependency, but module 'MyPlugin' depends on module 'Y'」という警告を出します。
  • IsExperimentalVersion / IsBetaVersion は、エディターに成熟度として表示される項目です。EnabledByDefault: true にすると、.uproject に記載がなくてもすべてのプロジェクトでプラグインが有効になります。
  • コンテンツのみのプラグインでは Modules を完全に省略し、"CanContainContent": true のままにします。
  • ゲーム機能プラグイン(UGameFeatureData、アクション)は ue-game-features の担当です。
// Plugins/MyPlugin/Source/MyPlugin/MyPlugin.Build.cs — runtime module
using UnrealBuildTool;

public class MyPlugin : ModuleRules
{
    public MyPlugin(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "GameplayAbilities" });
    }
}
// Plugins/MyPlugin/Source/MyPluginEditor/MyPluginEditor.Build.cs — editor module
using UnrealBuildTool;

public class MyPluginEditor : ModuleRules
{
    public MyPluginEditor(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine" });
        PrivateDependencyModuleNames.AddRange(new string[] { "MyPlugin", "UnrealEd", "ToolMenus", "PropertyEditor" });
    }
}

ランタイムモジュールにエディターヘッダーを含めないでください。エディターコードは #if WITH_EDITOR で、エディター依存関係は if (Target.bBuildEditor) で条件分岐します。

エンジンのプラグインとプロジェクトのプラグイン: Engine/Plugins/ は、そのインストール環境にあるすべてのプロジェクトで共有されます。<Project>/Plugins/ はプロジェクトとともに移動し、名前が重複した場合はこちらが優先されます。インストール済み(Launcher)エンジンに含まれるのは、プリコンパイル済みのエンジンモジュールのみです。プリコンパイルされていないエンジンモジュールに依存すると、「Missing precompiled manifest for 'X'. This module can not be referenced in a monolithic precompiled build, remove this reference or migrate to a fully compiled source build.」というエラーが発生します。

この型を提供するモジュール

*DependencyModuleNames に追加対象有効にするプラグイン
CoreFString、TArray、FName、UE_LOG、FModuleManager—
CoreUObjectUObject、UClass、FInstancedStruct、リフレクション—
EngineAActor、UActorComponent、UWorld、UGameInstance、UAudioComponent—
InputCoreFKey、EKeys—
EnhancedInputUInputAction、UInputMappingContext、UEnhancedInputComponentEnhancedInput
GameplayTagsFGameplayTag、FGameplayTagContainer、UGameplayTagsManager—
GameplayTasksUGameplayTask、UGameplayTasksComponent—
GameplayAbilitiesUAbilitySystemComponent、UGameplayAbility、UGameplayEffectGameplayAbilities
NetCoreFFastArraySerializer、プッシュモデルのマクロ—
DeveloperSettingsUDeveloperSettings—
Slate、SlateCoreSWidget、SCompoundWidget/FSlateBrush、FSlateColor—
UMGUUserWidget、UButton、UTextBlock—
CommonUI、CommonInputUCommonActivatableWidget、UCommonButtonBaseCommonUI
ModelViewViewModelUMVVMViewModelBase、UMVVMViewModelViewViewModel(5.8 ではベータ版)
AIModule、NavigationSystemAAIController、UBehaviorTree/UNavigationSystemV1—
StateTreeModule、GameplayStateTreeModuleUStateTree、FStateTreeTaskBase/UStateTreeComponentStateTree、GameplayStateTree
MassEntity、MassCore、MassSignalsFMassEntityManager、UMassProcessor/FTransformFragment/UMassSignalSubsystem—(コアモジュール)
NiagaraUNiagaraComponent、UNiagaraSystem、UNiagaraFunctionLibraryNiagara
PCGUPCGComponent、UPCGGraph、UPCGSettingsPCG
MoverUMoverComponent、UCharacterMoverComponentMover(5.8 では試験的機能)
GameplayCamerasUGameplayCameraComponent、UCameraAssetGameplayCameras(5.8 では試験的機能)
LevelSequence、MovieSceneULevelSequence、ULevelSequencePlayer/UMovieScene—
PhysicsCore、ChaosUPhysicalMaterial/Chaos ソルバーの型—
ProceduralMeshComponentUProceduralMeshComponentProceduralMeshComponent
GeometryScriptingCore、GeometryFrameworkUGeometryScriptLibrary_MeshPrimitiveFunctions/UDynamicMeshGeometryScripting
AudioExtensionsIAudioParameterControllerInterface、FAudioParameter—

エディターおよびネットワーキングのモジュールを含む全表は、references/build-cs-reference.md にあります。

ビルドエラーの解決

エラーメッセージ最初に確認すること
LNK2019 unresolved external symbol / LNK2001モジュールが *DependencyModuleNames に含まれていない、または参照先クラスに MYGAME_API がない
C1083: Cannot open include fileモジュールが依存関係に含まれていない、またはモジュールの Public/ ルートからの相対パスでインクルードが記述されていない
#include found after .generated.h file#include "MyClass.generated.h" を最後のインクルードに移動する
Expected a GENERATED_BODY() at the start of the classUCLASS/USTRUCT 本体の最初の行に GENERATED_BODY() を追加する
Could not find definition for module 'X'X.Build.cs が見つからない、または .uproject/ExtraModuleNames のモジュール名が間違っている
Circular dependency for 'X.Build.cs' detected共通モジュールを切り出すか、一方を DynamicallyLoadedModuleNames に切り替える
Missing precompiled manifest for 'X'インストール済みエンジンではそのエンジンモジュールをコンパイルできないため、依存関係を削除するか、ソースビルドを使用する
Plugin 'X' failed to load because module 'Y' could not be foundプラグインを再ビルドする。そのモジュールはこのターゲット用にコンパイルされていない
Module 'X' not found - its StaticallyLinkedModuleInitializers function is nullモノリシックビルドでモジュールがリンクされていないため、ExtraModuleNames または .uplugin に追加する

詳しいメッセージ、原因、MSVC の警告レベル対応表、Live Coding の制限、クックの失敗については、references/common-build-errors.md を参照してください。

非推奨 — 使用しないでください

出力しないでください5.8 で使用出典
bEnforceIWYU = trueIWYUSupport = IWYUSupport.Full(すでにデフォルトです)Configuration/Rules/ModuleRules.Obsolete.cs の [Obsolete("Deprecated in UE5.2 - Use IWYUSupport instead.")]
bUseAVX = trueMinCpuArchX64 = MinimumCpuArchitectureX64.AVX2ModuleRules.Obsolete.cs の [Obsolete("bUseAVX is obsolete ... replace with MinCpuArchX64")]
ModuleRules/TargetRules の ShadowVariableWarningLevel = WarningLevel.ErrorCppCompileWarningSettings.ShadowVariableWarningLevelModuleRules.Obsolete.cs、TargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.6 ...")]
UnsafeTypeCastWarningLevel = ... を直接指定CppCompileWarningSettings.UnsafeTypeCastWarningLevelModuleRules.Obsolete.cs、TargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.6 ...")]
bEnableUndefinedIdentifierWarnings/bUndefinedIdentifierErrorsCppCompileWarningSettings.UndefinedIdentifierWarningLevel2 段階で変更されました。5.5 ではルールクラスの UndefinedIdentifierWarningLevel に移動し、5.6 では CppCompileWarningSettings の配下に移動しました。ModuleRules.Obsolete.cs、TargetRules.Obsolete.cs の [Obsolete(...)]
TargetRules の DeprecationWarningLevel = ...CppCompileWarningSettings.DeprecationWarningLevelTargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.6 ...")]
bUsesSteam = true削除してください。このフラグは何もしませんTargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.5 - No longer used in engine.")]
bCompileChaos、bUseChaos、bCompilePhysX、bCompileAPEX、bCompileNvCloth削除してください。Chaos は常に有効ですTargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.1 ...")]
bDisableDebugInfo = trueDebugInfo = DebugInfoMode.NoneTargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.4 - Replace with TargetRules.DebugInfo")]
bUseFastPDBLinking = true削除してくださいTargetRules.Obsolete.cs の [Obsolete("Deprecated in UE5.7 - No longer recommended")]
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1 … Unreal5_5EngineIncludeOrderVersion.Unreal5_8Configuration/Rules/TargetRules.cs の [Obsolete("The Unreal 5.5 include order is unsupported.")]
EngineIncludeOrderVersion.Unreal5_6Unreal5_8TargetRules.cs の [Obsolete("... deprecated and will be unsupported in 5.9.")]
ディスクリプター内の "WhitelistPlatforms"、"BlacklistPlatforms"、"WhitelistTargets""PlatformAllowList"、"PlatformDenyList"、"TargetAllowList"Configuration/Descriptors/ModuleDescriptor.cs の非推奨値へのフォールバック読み取り処理
"Type": "Developer""Type": "DeveloperTool"ModuleDescriptor.cs の「The 'Developer' module type has been deprecated in 4.24」
リリース済みプロジェクト内の EngineIncludeOrderVersion.Latest、BuildSettingsVersion.LatestUnreal5_8/V7 に固定してくださいUBT ドキュメント:「Using Latest comes with a high risk of introducing compile errors」(TargetRules.cs)

よくある間違い

すべてを PublicDependencyModuleNames に追加する: 依存先のすべてのモジュールがインクルードパスを継承し、再コンパイルの頻度が高くなります。Public/ ヘッダーのいずれかで必要になるまでは、依存関係を非公開にしておきます。

MYGAME_API の付け忘れ: クラスは自身のモジュール内ではコンパイルできますが、別のモジュールから使用すると LNK2019 で失敗します。このマクロは定義ではなく、クラスまたは非メンバー関数の宣言に追加します。

IMPLEMENT_MODULE の名前の不一致: Build.cs が MyModule であるモジュール内で IMPLEMENT_MODULE(FMyModule, MyGameplay) を使うと、「Module name mismatch」警告(致命的なエラーではなく UE_STATIC_ASSERT_WARN)が出ます。また、これとは別に、リンカーが IMPLEMENT_MODULE_MyModule を探すため、モノリシックビルドでは読み込みに失敗します。第 2 引数はクラス名ではなく、モジュール名です。

ランタイムモジュールにエディターコードを含める: #include "Editor.h" を使うか、PublicDependencyModuleNames に UnrealEd を追加すると、Game、Client、Server ターゲットで問題が発生します。#if WITH_EDITOR と if (Target.bBuildEditor) で囲むか、コードを Editor タイプのモジュールに移します。

モジュールを 1 か所にしか登録しない: モジュールは .uproject/.uplugin の Modules と、各 Target.cs の ExtraModuleNames の両方に記載する必要があります。どちらかが欠けると、「Could not find definition for module」が表示されるか、モジュールが読み込まれません。

登録に不適切な LoadingPhase を使う: 他のモジュールが Default で読み取るアセットタイプ、カスタム UClass 登録、コンソール変数は、PreDefault で読み込む必要があります。

プラグインの依存関係を宣言しない: .uplugin のモジュールが Plugins エントリなしで別のプラグインのモジュールに依存すると、UBT の依存関係に関する警告が出ます。また、もう一方のプラグインが無効になったときに問題が発生します。

推移的なインクルードに依存する: Engine/World.h がたまたまインクルードしていたためにコンパイルできていたヘッダーは、新しい IncludeOrderVersion でそのエンジンヘッダーのインクルードが削減されると、問題が発生します。使用するものは明示的にインクルードします。

ヘッダーパスが間違っている: Actor.h または Engine/Actor.h をインクルードすると C1083 が発生します。ファイルは Engine/Classes 配下の GameFramework/Actor.h です。

関連するスキル

  • ue-cpp-foundations — UCLASS/UPROPERTY/UFUNCTION の指定子、GENERATED_BODY、UHT がパブリックヘッダーで必要とするもの
  • ue-editor-tools — エディター専用モジュール、UnrealEd/ToolMenus/PropertyEditor の依存関係、UEditorSubsystem
  • ue-testing-debugging — UE_LOG カテゴリーと bUseLoggingInShipping、オートメーションテストのモジュールとターゲット
  • ue-game-features — Game Feature プラグイン、UGameFeatureData、UGameFeatureAction、Modular Gameplay
  • ue-project-context — モジュール名、ターゲット、有効なプラグインを記録する .agents/ue-project-context.md ファイル
  • ue-data-assets-tables — UDataAsset、UDataTable、ソフト参照、Asset Manager、非同期読み込み

コメント