UnityのManaged Code Strippingで消されたコードを知る
要約
Edit > Preferences > Diagnostics > VMUnityLinkerAdditionalArgsに設定を追加します。
--enable-report --enable-snapshot
下記にレポートが出力されます。
出力フォルダ\プロジェクト名_BackUpThisFolder_ButDontShipItWithYourGame\Managed\UnityLinker_Diagnostics\SweepReport.log
Managed Code Strippingとは?
Managed Code StrippingはUnityにおけるビルドプロセス中に未使用のコードを削除する機能です。
この機能により、アプリケーションのサイズを削減し、最終的なビルドのパフォーマンスを向上させることができます。
Managed Code Strippingで消されたコードを実行した場合
Managed Code Strippingによってコードが削除されると、そのコードを実行しようとした際にMissingMethodException
やThe referenced script (Unknown)
のような警告が出ることがあります。
このような状況は、特にManaged Strippingのレベルを運用中にHighに設定した場合に発生し、デバッグが困難になる可能性があります。
消されたコードの確認方法
Managed Code Strippingが原因でコードが削除されたかどうかを確認する方法として、Unityでは設定を有効にすることでレポートが生成されるようになっています。
設定箇所
設定はEdit > Preferences > Diagnostics > VMUnityLinkerAdditionalArgs
から行います。
設定内容
以下の設定を追加してください。
--enable-report --enable-snapshot
レポートの出力先
以下のパスに出力されます。
出力フォルダ\プロジェクト名_BackUpThisFolder_ButDontShipItWithYourGame\Managed\UnityLinker_Diagnostics\SweepReport.log
追記 : フォーラム上で指摘されているパスに生成されているケースもあるようです。
"%TEMP%\UnityLinker\Snapshots" or on macOS "$TMPDIR/UnityLinker/Snapshots"
出力結果の参考
シーン参照されているUseClassとされていないUnUseClassを用意して、
Managed StrippingのレベルをHighで出力した結果です。
UnUseClassはクラスごと、UseClassは使用していない関数が削除されています。
環境はunity 2021.3.17、出力プラットフォームはスタンドアロンです。
情報ソース
フォーラムでの公式回答が大本になっています。
Unity Forum - IL2CPP Android Build Failing
Discussion
出力がフォーラム通りに出ているケースを見かけたので、フォーラムで提示されたパスについて追記しました。