ドキュメント

Unity Engine

Unity Engine

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 つの方法のいずれかで変更できます。
  • エディターの
    プレイヤー設定

    ?

    メニューから。プレイヤー設定メニューからスクリプトバックエンドを変更するには、以下の手順を実行します。
    1. 編集>
      プロジェクト設定

      ?

      に移動します。
    2. プレイヤー設定ボタンをクリックして、Inspector で現在のプラットフォームのプレイヤー設定を開きます。
    3. Other Settings サブメニューの下の 設定セクションの見出しに操作します。
    4. スクリプティングバックエンド:

      ?

      ドロップダウン メニューをクリックし、Mono を選択します。
    ビルドプロファイルウィンドウからプレイヤー設定メニューを開くこともできます。ファイル>ビルドプロファイルに移動し、プレイヤー設定タブをクリックします。
  • エディタースクリプティング API を使用。
    PlayerSettings.SetScriptingBackend
    プロパティを使用して、Unity が使用するスクリプティング バックエンドの終了を変更します。

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コンパイル可能なジョブ システムを提供します。詳細については、「 ジョブシステムでのマルチスレッドコードの記述 」を参照してください。
  • Mono の
    DateTime
    、
    TimeZoneInfo
    、および
    CultureInfo
    の実装は Windows .NET 動作と異なる場合があります。グローバル化された文化固有のコードをターゲット プラットフォームでテストするようにしてください。

Burstによるランタイムパフォーマンスの最適化

適切なプロジェクトでは、Burst コンパイラーを Mono とともに使用して、コードの互換性のある部分を高度に最適化されたマシンコードにコンパイルすることで、プロジェクトのランタイムパフォーマンスを向上させることができます。詳細は、Burst コンパイル を参照してください。

追加リソース