Version: 2019.4
言語: 日本語
シーンの再ロード
エディターのトラブルシューティング

Enter Play Mode の詳細

以下は、Enter Play Mode で Scene Reloading と Domain Reloading が有効な場合に、Unity が行う処理とイベントすべてのリストです。

  1. AssemblyReloadEventbeforeAssemblyReload イベントが発生します。
  2. C# ドメインが停止します。 a. OnDisable() がすべての ScriptableObjects と MonoBehaviours に対して呼び出されます。
    b. Unity はすべての非同期操作が終了するのを待ちます。
  3. すべての MonoBehaviours と ScriptableObjects の状態はシリアライズされます。 a. OnBeforeSerialize() が呼び出されます。
    b. プライベートとパブリックのフィールド値は、[NonSerialized] でマークされたもの以外はすべてシリアライズされます。
  4. マネージラッパーはネイティブの Unity オブジェクトから切り離されています。
  5. Unity Child Domain は再ロードされます。 a. Mono ドメインはアンロードされます。
    i. AppDomain.DomainUnload イベントが発生します。
    ii. Unity Child Domain が除去されます。
    1. GC とファイナライザーが呼び出されます。
    2. スレッドは終了されます。 3. すべての JIT 情報は削除されます。 b. 新しい Unity Child Domain が作成されます。
  6. アセンブリがロードされます。
    a. システムアセンブリがロードされます。
    b. Unity アセンブリがロードされます。
    c. ユーザーアセンブリがロードされます。
  7. 同期コンテキストが初期化されます。
  8. スクリプトの状態が復元されます。
    a. すべての Unity オブジェクトのスクリプト可能な部分が再作成されます。
    i. コンストラクターが呼び出され、静的変数はそのデフォルト値を割り当てられます。
    b. すべての Unity オブジェクトの状態はデシリアライズされます。 i. すべての Unity オブジェクトのシリアライズされた状態は復元されます。
    1. OnAfterDeserialize イベントが発生します。
    ii. OnValidate() が呼び出されます。
    iii. [ExecuteInEditMode] 属性を使うスクリプトに対して
    1. OnEnable() が呼び出されます。 2. OnDisable() が呼び出されます。
    3. OnDestroy() が呼び出されます。
  9. InitializeOnLoadInitializeOnLoadMethod を持つメソッドが呼び出されます。
  10. AssemblyReloadEventafterAssemblyReload が呼び出されます。

シーンの再ロード
エディターのトラブルシューティング