Event Execution Order
Author: Michael Garforth
Contents |
Game loop
The following all happens in a single loop, in the order specified Physics does not necessarily run each time, and can run multiple times
After an instantiation
For objects that were instantiated last game loop iteration:
Physics loop
Physics is run in a loop, iterating over the following until physics has caught up to the current frame:
- FixedUpdate
- Physics simulation
- OnCollisionEnter / OnCollisionStay / OnCollisionExit
- OnTriggerEnter / OnTriggerStay / OnTriggerExit
- WaitForFixedUpdate (Coroutines which yielded WaitForFixedUpdate will resume execution after the next physics iteration completes)
Update events
The rest of the events are run once per game loop iteration:
- OnMouseDown / OnMouseUp / OnMouseDrag / OnMouseEnter / OnMouseExit / OnMouseOver
- Update
- WaitForSeconds / yield / yield return null (Coroutines which yielded one of these will resume execution here, with WaitForSeconds resuming after the defined time)
- LateUpdate
Network
- RPC methods
- OnSerializeNetworkView
Rendering
- OnPreCull
- OnBecameVisible / OnBecameInvisible
- OnWillRenderObject
- OnPreRender
- OnRenderObject
- OnPostRender
- OnRenderImage (Pro only)
- OnGUI (Called multiple times. Layout then Repaint events are called first, followed by a Layout and keyboard/mouse event for each input event)
- OnDrawGizmos (Only when scene is drawn, even if object is inactive)
Before the frame ends
- WaitForEndOfFrame (Coroutines which yielded WaitForEndOfFrame will resume execution before the next game loop finishes)
First scene load
Repeated once per object:
At the beginning of the next frame, per object:
After calling Application.LoadLevel
Before the level loads
Repeated once per active object, after the end of the current frame:
Level loads
After level loads
Repeated once per scene object:
Repeated once per active DontDestroyOnLoad object from last level:
Repeated once per active object:
Please pay attention: OnLevelWasLoaded is NOT guaranteed to run before all of the Awake calls. In most cases it will, but in some might produce some unexpected bugs. If you need some code to be executed before Awake calls, use OnDisable instead.
When quitting
For all active objects:
Immediate events
These are all called immediately when certain functions are called (e.g. Instantiate, setting enabled):