Enter Play mode with scene reload disabled
Understand how disabling scene reload on enter Play mode affects your application and how you can compensate for these effects in your code.
Read time 3 minutesLast updated 13 days ago
Scene reload on entering Play mode is enabled by default. This means that when you enter Play mode, Unity destroys all existing scene GameObjects and reloads the scene from disk. As your project gets more complex, the time between pressing the Play button and the scene fully loading in the Editor increases.
When you disable scene reloading, the process takes less time. Instead of reloading the scene from disk, Unity only resets the scene's modified contents. Unity still calls the same event functions (such as , and ) as if the scene were freshly loaded.
OnEnableOnDisableOnDestroyEffects of disabling scene reload when entering Play mode
When you disable scene reload, the time it takes to start your application in the Editor is no longer representative of the startup time in the built version. If you want to debug or profile exactly what happens during your project's startup, you should enable scene reloading to more accurately represent the true loading time and processes that happen in the built version of your application.
Otherwise, disabling scene reload should have minimal effects on your project. However, because scene reloading is closely connected to domain reload, there are a few important differences:
- Unity doesn't recreate existing objects or call constructors, which means non-serialized fields keep the values assigned to them during Play mode on returning to Edit mode. This applies for fields of all script types, including MonoBehaviours, ScriptableObjects, and your own custom C# types. For detailed information on what is and isn't serialized in different contexts, refer to Serialization rules.
-
- Unity converts null and
privatefields of array andinternaltype to an empty array orListobject during domain reload and they stay non-null for runtime (non-Editor) scripts.List - Scripts decorated with or
[ExecuteInEditMode]don't receive[ExecuteAlways]orOnDestroycalls. While in Edit mode, these scripts might modify their own fields or those of other runtime scripts. To mitigate this, you can initialize any affected fields in anAwakecallback with code inside a condition that checks the value ofOnEnable. For an example of this and more context on the importance of separating Play mode and Edit mode code, refer to theEditorApplication.isPlayingAPI description.[ExecuteAlways]
For more details on the events skipped with scene reload disabled, refer to Details of disabling domain and scene reload.