Version: Unity 6.0 (6000.0)
言語 : 日本語
Domain Reload
ドメインリロードとシーンリロードの無効化の詳細

Reload Scene

デフォルトでは、Reload Scene は有効になっています。つまり、再生モードに切り替えると、Unity は既存のシーンゲームオブジェクトをすべて破棄し、ディスクからシーンをリロードします。Unity がこれを行うのにかかる時間は、シーンが複雑になるほど長くなります。つまり、プロジェクトが複雑になるほど、再生ボタンを押してからエディターにシーンが完全に読み込まれるまでの待ち時間は長くなります。

シーンのリロードを無効にすると、処理時間が短縮されます。これにより、プロジェクトの開発をより速く繰り返すことができます。ディスクからシーンをリロードする代わりに、シーンの変更されたコンテンツのみがリセットされます。これにより、シーンのアンロードとリロードによる時間とパフォーマンスへの影響を回避できます。Unity は引き続き、新規にロードされたかのように、同じ初期化関数 (OnEnableOnDisableOnDestroy など) を呼び出します。

シーンのリロードの無効化

Reload Scene を無効にすると、エディターでアプリケーションを起動するのにかかる時間は、ビルドされたバージョンの起動時間を表すものではなくなります。したがって、プロジェクトの起動時に何が起こっているのかを正確にデバッグまたはプロファイルしたい場合は、Reload Scene を有効にして、ビルドされたバージョンで発生する実際のロード時間とプロセスをより正確に表す必要があります。

詳細については、再生モードの設定方法を参照してください。

Reload Scene を無効にするには、以下を行います。

  1. Edit > Project Settings の順に選択して Project Settings ウィンドウを開きます。
  2. Editor タブをクリックします。
  3. Enter Play Mode Settings セクションの When entering play mode ドロップダウンメニューで、以下のいずれかを行います。
    • シーンのリロードを無効にしてドメインのリロードを有効にするには、Reload Domain only を選択します。
    • ドメインのリロードとシーンのリロードの両方を無効にするには、Do not reload Domain or Scene を選択します。

シーンのリロードをスキップする場合の効果

Reload Scene を無効にしても、プロジェクトへの副作用はほとんどありません。ただし、Reload Scene は Reload Domain と密接に関連しているため、いくつかの重要な違いがあります。

  1. シリアライズされていない ScriptableObject フィールドおよび MonoBehaviour フィールドは、編集モードに戻るときに再生モード中に割り当てられた値を維持します。これは、Unity が既存のオブジェクトを再作成せず、コンストラクターも呼び出さないためです。異なるコンテキストでシリアライズされるものとされないものを理解するには、Unity がシリアル化を使用する方法を参照してください。private フィールドは、通常のビルドパイプラインの一部としてシリアライズされるのではなく、エディターのスクリプトのホットリロードの一部としてシリアライズされることに注意してください。再生モードで変更した private フィールドが、Enter 再生モードでのシーンとドメインのリロードが無効になっていても、再生モードで元の値にリセットされる場合があるのはこのためです。

  2. Unity は、ドメインのリロード中に配列/リストタイプの null private フィールドと内部フィールドを空の配列/リストオブジェクトに変換し、ランタイム (エディター以外) のスクリプトでは null 以外を維持します。

  3. ExecuteInEditMode を使用するスクリプト、または ExecuteAlways スクリプトは、OnDestroy の呼び出しまたは Awake の呼び出しを受信しません。Unity は Awake を呼び出さず、EditorApplication.isPlaying プロパティをチェックする Awake/OnEnable メソッドで再生モードの変更時に EditorApplication.isPlaying がすでに true の場合のみ OnEnable を呼び出します。ランタイム (編集不可) スクリプトの非シリアライズフィールドは編集モードではアクティブではないため、問題になりません。ただし、ExecuteInEditMode または ExecuteAlways でマークされたスクリプトはそれら自体を変更したり、他のランタイムスクリプトのフィールドに接触したりする場合があります。これを回避するには、OnEnable コールバックの影響を受けるフィールドを独自に初期化します。

追加リソース

Domain Reload
ドメインリロードとシーンリロードの無効化の詳細
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961