Enter Play mode without scene reload
Understand how entering Play mode without scene reload affects your application and how you can compensate for these effects in your code.
Read time 3 minutesLast updated 12 days ago
Scene reload on entering Play mode is on 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 turn scene reloading off, 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 turning scene reload off when entering Play mode
When you turn scene reload off, 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, turning scene reload off 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 when scene reload is off, refer to Domain and scene reload execution order reference.