Mono スクリプティングバックエンド終了
Mono は、C# コードをジャストインタイムで(JIT)コンパイルするためのマネージ環境を提供する、安定した成熟した .NET ランタイムです。
読み終わるまでの所要時間 11 分最終更新 3日前
Mono スクリプトバックエンドは、オープンソース Mono プロジェクトの Unity のフォークです。Mono は、互換性のある性のあるプラットフォームで Unity のエディターとプレイヤーを動かす、成熟したクロスプラットフォームの .NET ランタイムです。高速なイテレーションと優れたツールを提供しますが、ランタイム パフォーマンスは IL2CPP よりも低く、最新の .NET 機能には対応していません。
Mono は JIT (ジャストインタイム) コンパイルを使用して、ランタイムに C# コードをマシンコードに変換します。Monoは、マネージ オブジェクトのライフサイクル管理、コード リロードの処理、Boehm-Demers-Weiserガベージ コレクターによるスコープ外のオブジェクトの自動ガベージコレクションを実行します。ガベージコレクターの動作はある程度設定できます。詳細については、ガベージコレクションモードを参照してください。
Mono はマネージコードのデバッグをサポートします。詳細は、「 Unity での C# コードのデバッグ 」を参照してください。
Mono を使用したプロジェクトの構築
ビルドプロセスを開始するには、ビルドプロファイルウィンドウ (メニュー:ファイル > ビルドプロファイル) を選択し、ビルド を選択します。
Unity がアプリケーションのビルドに使用するスクリプティングバック終了は、以下の 2 つの方法のいずれかで変更できます。
-
エディターのメニューから。プレイヤー設定メニューからスクリプトバックエンドを変更するには、以下の手順を実行します。プレイヤー設定
?
- 編集> に移動します。プロジェクト設定
?
- プレイヤー設定ボタンをクリックして、Inspector で現在のプラットフォームのプレイヤー設定を開きます。
- Other Settings サブメニューの下の 設定セクションの見出しに操作します。
- ドロップダウン メニューをクリックし、Mono を選択します。スクリプティングバックエンド:
?
ビルドプロファイルウィンドウからプレイヤー設定メニューを開くこともできます。ファイル>ビルドプロファイルに移動し、プレイヤー設定タブをクリックします。 - 編集>
-
エディタースクリプティング API を使用。プロパティを使用して、Unity が使用するスクリプティング バックエンドの終了を変更します。
PlayerSettings.SetScriptingBackend

The Configuration section of the Player settings
Mono と IL2CPP のスクリプティングバックエンドの両方に、ターゲットとするプラットフォームごとに新しいビルドが必要です。例えば、Android と iOS の両方のプラットフォームをサポートするには、アプリケーションを 2 回ビルドし、Android 用と iOS 用の 2 つのバイナリファイルを作成する必要があります。
ドメインリロード
Unity エディターは Mono を埋め込むため、C# コードは Mono によってマネージされ、エディターの再生モードで実行する際に Mono の制約を受けます。これのキーポイントは、再生モードの開始と終了、またはスクリプトの再コンパイルが AppDomain の再ロードをトリガーし、静的ステートをリセットすることです。Unity が再生モードに入り、ドメインの再ロードをオフにしてイテレーションをスピードアップする方法を設定できますが、静的ステートのリセットはコードで処理する必要があります。詳細については、「ドメイン リロードがディセーブルにされた再生モード開始」を参照してください。
Mono ビルドの最適化
Mono と IL2CPP は同じ基本の .NET ライブラリするため、多くのパフォーマンスの問題とベストプラクティスが両方に適用されます。ただし、Mono のコンテキストでは以下の考慮します。
-
Mono の JIT コンパイルは、IL2CPP の AOT コンパイルと比較して、大規模なコードベースのランタイムパフォーマンスと起動時間が低くなる可能性があります。GC および JIT のホットスポットを特定するには、必ず Unity プロファイラーを使用します。Project Auditor ツールは、一般的なパフォーマンス問題の特定と修正にも役立ちます。詳細については、「 最適化 」を参照してください。
-
ランタイムに大量のアロケーションを発生させるようなコーディング方法によっては、ガベージコレクターのオーバーヘッドが増加し、パフォーマンスが低下する可能性があります。Unity でのパフォーマンスマネージコードの記述に関するガイダンスについては、「 マネージメモリのコードの最適化 」を参照してください。ガベージコレクターのオーバーヘッドの追跡と削減については、マネージメモリ を参照してください。
-
Unity APIは一般にスレッドセーフではありません。つまり、Unityのメイン スレッドから呼び出す必要があります。Unity API での .NETの使用は避けてください。
Task- 本質的に非同期で長時間実行される操作を扱う場合、Unity は .NET のより効率的な代替として
Taskクラスを提供します。詳細は、「 Awaitable クラスを使用した非同期プログラミング 」を参照してください。Awaitable - 生存期間は短いが計算負荷が高い並列作業のために、UnityはBurstコンパイル可能なジョブ システムを提供します。詳細については、「 ジョブシステムでのマルチスレッドコードの記述 」を参照してください。
- 本質的に非同期で長時間実行される操作を扱う場合、Unity は .NET
-
Mono の、
DateTime、およびTimeZoneInfoの実装は Windows .NET 動作と異なる場合があります。グローバル化された文化固有のコードをターゲット プラットフォームでテストするようにしてください。CultureInfo
Burstによるランタイムパフォーマンスの最適化
適切なプロジェクトでは、Burst コンパイラーを Mono とともに使用して、コードの互換性のある部分を高度に最適化されたマシンコードにコンパイルすることで、プロジェクトのランタイムパフォーマンスを向上させることができます。詳細は、Burst コンパイル を参照してください。