ドキュメント

Unity Engine

Unity Engine

ドメインとシーンのリロードの無効化の詳細

Unityがドメインとシーンのリロード中に実行する作業と、それらが無効な場合にスキップされるものを理解します。
読み終わるまでの所要時間 7 分最終更新 3日前

ドメイン リロードとシーン リロードが無効の場合に Unity がスキップするもの

高レベルの透視では、再生モードの開始は以下の主要ステージで構成されます。
  • 現在のシーンをバックアップします。これはシーンが変更されたときにのみ発生します。再生モードを終了したときに、Unity がシーンを再生モード開始前のステートに戻すことができます。
  • ドメイン リロード。スクリプト ドメインをリロードして、スクリプト ステートをリセットします。
  • シーンリロード。シーンをリロードして、シーンステートをリセットします。
  • シーン更新。これは 2 回発生します。1 回はレンダリングなし、もう 1 回はレンダリングありです。
ドメインリロードとシーンリロードを組み合わせたタスクは、スクリプトドメインをリセットし、プレイヤーで実行するのと同じようにアプリケーションの起動動作をシミュレートします。Project Settings でこれらの手順を使用不可にすると、Unity はこれらの手順をスキップします。
以下の図は、ドメイン リロードとシーン リロードが無効な場合に Unity がスキップする正確なイベントに関する詳細情報を示しています。青は、ドメインのリロードが無効な場合に Unity がスキップするイベントを示し、緑は、シーンのリロードが無効な場合に Unity がスキップするイベントを示します。

Event functions in the MonoBehaviour script lifecycle. Event functions skipped when domain reload is disabled are highlighted blue. Event functions skipped when scene reload is disabled are highlighted green.

シーンの再ロードとドメインの再ロードの両方が有効になっている場合の Unity の動作

シーン リロードとドメイン リロードを有効にすると、Unity が再生モードに入るときに実行するすべてのプロセスとイベントのリストが次に表示されます。
  1. AssemblyReloadEvent
    beforeAssemblyReload
    イベントが発生します。
  2. C# ドメインが停止している。
    a.
    OnDisable()
    はすべての ScriptableObject と MonoBehaviour に対して呼び出されます。
    b.Unity はすべての非同期操作が終了するのを待ちます。
  3. すべての MonoBehaviour と ScriptableObject のステートはシリアライズされます。
    a.
    OnBeforeSerialize()
    が呼び出されます。
    b.public フィールドと private フィールドの値は、
    [NonSerialized]
    でマークされたものを除いてすべてシリアライズされます 。
  4. マネージはネイティブの Unity オブジェクトから切断されます。
  5. Unity の子ドメインが再ロードされます。
    'A') に作成します。Mono ドメインアンロード:
    i:
    AppDomain.DomainUnload
    イベントが発生します。
    二。Unity の子ドメインが破棄される
    1. GC とファイナライザーが呼び出されます。
    2. スレッドは終了します。
    3. すべての JIT 情報が削除されます。
    b.新しい Unity 子ドメインが作成されます。
  6. アセンブリがロードされます。
    'A') に作成します。システムアセンブリがロードされます。
    b.Unity アセンブリがロードされます。
    C:ユーザーアセンブリがロードされます。
  7. 同期コンテキストが初期化されます。
  8. スクリプトステートが復元されます。
    'A') に作成します。すべての Unity オブジェクトのスクリプト可能な部分が再作成されます。
    i:コンストラクターが呼び出され、Static にはデフォルト値が割り当てられます。
    b.すべての Unity オブジェクトのステートはデシリアライズされます。
    i:すべての Unity オブジェクトのシリアル化された状態が復元されます。
    1. OnAfterDeserialize
      イベントが発生します。
    ii.
    OnValidate()
    が呼び出されます。
    ⁇
    [ExecuteInEditMode]
    属性を使用するスクリプトの場合:
    1. OnEnable()
      が呼び出されます。
    2. OnDisable()
      が呼び出されます。
    3. OnDestroy()
      が呼び出されます。
  9. InitializeOnLoad および InitializeOnLoadMethod を持つメソッドが呼び出されます。
  10. AssemblyReloadEvent
    afterAssemblyReload
    が呼び出されます。

追加リソース