デフォルトでは、Reload Scene は有効になっています。つまり、再生モードに切り替えると、Unity は既存のシーンゲームオブジェクトをすべて破棄し、ディスクからシーンをリロードします。Unity がこれを行うのにかかる時間は、シーンが複雑になるほど長くなります。つまり、プロジェクトが複雑になるほど、再生ボタンを押してからエディターにシーンが完全に読み込まれるまでの待ち時間は長くなります。
シーンのリロードを無効にすると、処理時間が短縮されます。これにより、プロジェクトの開発をより速く繰り返すことができます。ディスクからシーンをリロードする代わりに、シーンの変更されたコンテンツのみがリセットされます。これにより、シーンのアンロードとリロードによる時間とパフォーマンスへの影響を回避できます。Unity は引き続き、新規にロードされたかのように、同じ初期化関数 (OnEnable、OnDisable、OnDestroy など) を呼び出します。
Reload Scene を無効にすると、エディターでアプリケーションを起動するのにかかる時間は、ビルドされたバージョンの起動時間を表すものではなくなります。したがって、プロジェクトの起動時に何が起こっているのかを正確にデバッグまたはプロファイルしたい場合は、Reload Scene を有効にして、ビルドされたバージョンで発生する実際のロード時間とプロセスをより正確に表す必要があります。
詳細については、再生モードの設定方法を参照してください。
Reload Scene を無効にするには、以下を行います。
Reload Scene を無効にしても、プロジェクトへの副作用はほとんどありません。ただし、Reload Scene は Reload Domain と密接に関連しているため、いくつかの重要な違いがあります。
シリアライズされていない ScriptableObject フィールドおよび MonoBehaviour フィールドは、編集モードに戻るときに再生モード中に割り当てられた値を維持します。これは、Unity が既存のオブジェクトを再作成せず、コンストラクターも呼び出さないためです。異なるコンテキストでシリアライズされるものとされないものを理解するには、Unity がシリアル化を使用する方法を参照してください。private フィールドは、通常のビルドパイプラインの一部としてシリアライズされるのではなく、エディターのスクリプトのホットリロードの一部としてシリアライズされることに注意してください。再生モードで変更した private フィールドが、Enter 再生モードでのシーンとドメインのリロードが無効になっていても、再生モードで元の値にリセットされる場合があるのはこのためです。
Unity は、ドメインのリロード中に配列/リストタイプの null private フィールドと内部フィールドを空の配列/リストオブジェクトに変換し、ランタイム (エディター以外) のスクリプトでは null 以外を維持します。
ExecuteInEditMode を使用するスクリプト、または ExecuteAlways スクリプトは、OnDestroy の呼び出しまたは Awake の呼び出しを受信しません。Unity は Awake を呼び出さず、EditorApplication.isPlaying プロパティをチェックする Awake/OnEnable メソッドで再生モードの変更時に EditorApplication.isPlaying がすでに true の場合のみ OnEnable を呼び出します。ランタイム (編集不可) スクリプトの非シリアライズフィールドは編集モードではアクティブではないため、問題になりません。ただし、ExecuteInEditMode または ExecuteAlways でマークされたスクリプトはそれら自体を変更したり、他のランタイムスクリプトのフィールドに接触したりする場合があります。これを回避するには、OnEnable コールバックの影響を受けるフィールドを独自に初期化します。