見出し画像

[Unity] デバッグ用AssemblyDefinitionへの参照を本番ビルド時にオミットする方法

UNITY_INCLUDE_TESTSが定義されたアセンブリは、普通はテストコードとみなされてビルド対象から除外されます。
しかし、UNITY_INCLUDE_TESTSが定義されたAssemblyDefinitionが、肝心のアプリコード側のアセンブリから参照されている場合、どういう扱いになるのか?作っているゲームの本番ビルドスクリプトを組んでいて気になったので調べました。

  • 対象:Robstar.Develop.asmdef

まずはUNITY_INCLUDE_TESTSを定義せずにそのままビルド。

UNITY_INCLUDE_TESTを定義していない場合

当然ですが、Robstar.Develop.dllは出力されています。IL2CPPの出力ファイルにもRobstar.Develop.cppはありました。
次に、コンパイルエラーにならないようにした上で、UNITY_INCLUDE_TESTSを定義してビルド。

UNITY_INCLUDE_TESTを定義した場合

Robstar.Develop.dllはありません。IL2CPPによって生成されたCPPファイルにもRobstar.Develop.cppはありませんでした。
「テストコードを含める」ビルド設定をすることによって、強制的にビルドに含めることもできますが、標準設定では含まれないようです。

結論

UNITY_INCLUDE_TESTSを定義したアセンブリは、たとえアプリのアセンブリが参照していたとしても、ビルド対象から除外されます。これを使えば、開発用の機能を集めたアセンブリを、ビルドから一括で外すことができます。
この操作をスクリプトで自動化するなら、asmdefファイルを更新する必要があるのですが、そちらの方が問題ですね。

この記事が気に入ったらサポートをしてみませんか?