シーン リロードが無効な状態で再生モードに入る
Enter 再生モードでシーンのリロードを無効にするとアプリケーションにどのような影響があり、コードでこれらの影響を補うことができるかを理解します。
読み終わるまでの所要時間 7 分最終更新 3日前
再生モード開始時のシーン リロードはデフォルトでイネーブルです。つまり、再生モードに入ると、Unity は既存のシーンGameObjectsオブジェクトをすべて破棄し、ディスクからシーンを再ロードします。プロジェクトが複雑になると、再生ボタンを押してからシーンがエディタに完全に読み込まれるまでの時間が長くなります。
シーンの再ロードを使用不可にすると、処理にかかる時間が短縮されます。ディスクからシーンを再ロードする代わりに、Unity はシーンの変更内容のみをリセットする。Unity は、シーンがロードされたばかりの場合と同じイベント関数 (、、 など) を呼び出します。
OnEnableOnDisableOnDestroy再生モードに入るときのシーンリロードの無効化の影響
シーンリロードを使用不可にすると、エディターでのアプリケーションの開始時間が、ビルドバージョンでの起動時間ではなくなります。プロジェクトの起動時に発生することを正確にデバッグまたはプロファイルする場合は、シーンの再ロードを有効にして、アプリケーションのビルドバージョンで発生する true の読み込み時間とプロセスをより正確に表す必要があります。
そうしないと、シーンリロードを無効にしてもプロジェクトへの影響は最小限に抑えられます。ただし、シーンのリロードはドメインリロードと密接に関連しているため、いくつかの重要な違いがあります。
- Unity は既存のオブジェクトやコールコンストラクターを再作成しません。つまり、編集モードに戻ったときに再生モード中に割り当てられた値が、シリアライズされていないフィールドによって維持されます。これは、MonoBehaviour、ScriptableObject、独自のカスタム C# タイプなど、すべてのスクリプトタイプのフィールドに適用されます。異なるコンテキストでシリアライズされるものとされないものの詳細については、シリアル化規則 を参照してください。
-
- Unity は、ドメイン リロード中に配列および型の null
Listおよびprivateフィールドを空の配列またはinternalオブジェクトに変換し、ランタイム(エディター以外)のスクリプトでは null 以外のままにします。List - または
[ExecuteInEditMode]で装飾されたスクリプトは、[ExecuteAlways]コールまたはOnDestroyコールを受信しません。編集モードでは、これらのスクリプトは独自のフィールドや他のランタイムスクリプトのフィールドを変更できます。これを軽減するには、Awakeコールバックの影響を受けるフィールドを、OnEnableの値をチェックする条件内のコードで初期化します。再生モードと編集モードコードを分けることの重要性に関する詳細なコンテキストの例については、EditorApplication.isPlayingAPI の説明 を参照してください。[ExecuteAlways]
シーン リロードがディセーブルでスキップされるイベントの詳細は、『 ドメインとシーン リロードのディセーブル化の詳細 』を参照してください。