概要
今回はエンジン内にマクロを定義する方法を解説します。
マクロを定義する理由は、エンジンを改造する場合にマクロで囲ったほうが、変更箇所を検索できたり、バニラの状態に戻したりできます。
この記事はUE5.3.2の環境で確認しています。
実装
「UEBuildTarget.cs」の「SetupGlobalEnvironment」関数に以下の内容を記述します。
Engine\Source\Programs\UnrealBuildTool\Configuration\UEBuildTarget.cs 5148行
// Begin:Added engine macro
GlobalCompileEnvironment.Definitions.Add("ENGINE_MODIFY");
// End: Added engine macro
以下のように改造コードとバニラのコードを分けたりできます。
#if defined(ENGINE_MODIFY)
// Begin:
#else
// End:
#endif
おまけ
シェーダー内にもマクロを定義できるようにしてみましょう。
以下の内容を「ShaderCompiler.cpp」の「GlobalBeginCompileShader」関数に記述します。
Engine\Source\Runtime\Engine\Private\ShaderCompiler\ShaderCompiler.cpp 6838行
#if defined(ENGINE_MODIFY)
// Begin:Add shader macro
Input.Environment.SetDefine(TEXT("ENGINE_MODIFY"), 1);
// End: Add shader macro
#endif
以下のように使用できます。
#if ENGINE_MODIFY
// Begin:
#else
// End:
#endif
まとめ
これでエンジン改造ライフが捗りますね。