🪤

UnityのManaged Code Strippingで消されたコードを知る

2024/03/10に公開
1
要約

Edit > Preferences > Diagnostics > VMUnityLinkerAdditionalArgsに設定を追加します。

--enable-report --enable-snapshot

下記にレポートが出力されます。

出力フォルダ\プロジェクト名_BackUpThisFolder_ButDontShipItWithYourGame\Managed\UnityLinker_Diagnostics\SweepReport.log

Managed Code Strippingとは?

Managed Code StrippingはUnityにおけるビルドプロセス中に未使用のコードを削除する機能です。
この機能により、アプリケーションのサイズを削減し、最終的なビルドのパフォーマンスを向上させることができます。
https://docs.unity3d.com/ja/2018.4/Manual/ManagedCodeStripping.html

Managed Code Strippingで消されたコードを実行した場合

Managed Code Strippingによってコードが削除されると、そのコードを実行しようとした際にMissingMethodExceptionThe 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