Destroying the attached Behaviour will result in the game or Scene receiving OnDestroy.
OnDestroy occurs when a Scene or game ends.
Stopping the Play mode when running from inside the Editor will end the application. As this end happens
an OnDestroy will be executed. Also, if a Scene is closed and a
new Scene is loaded the OnDestroy call will be made.
When built as a standalone application OnDestroy calls are made
when Scenes end. A Scene ending typically means a new Scene is loaded.
Note: OnDestroy will only be called on game objects that have previously been active.
In the following scripts the behaviour of OnDestroy is shown. When running inside
ExampleClass1
a button is available. Using this button calls OnDestroy and then
switches to ExampleClass2
. Once ExampleClass2
is active OnDestroy will be used
when the application is closed. If ExampleClass1
quits by closing the application it
will call OnDestroy. (In the build and run of the application the console displays
the text output to the Player Log.)
Warning: If the user suspends your application on a mobile platform, the operating system can
quit the application to free up resources. In this case, depending on the operating system,
Unity might be unable to call this method. On mobile platforms, it is best practice to not rely
on this method to save the state of your application. Instead, consider every loss of application
focus as the exit of the application and use MonoBehaviour.OnApplicationFocus to save any data.
using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement;
public class ExampleClass1 : MonoBehaviour { private float timePass = 0.0f; private int updateCount = 0;
void Start() { Debug.Log("Start1"); }
// code that generates a message every second void Update() { timePass += Time.deltaTime;
if (timePass > 1.0f) { timePass = 0.0f; Debug.Log("Update1: " + updateCount); updateCount = updateCount + 1; } }
void OnGUI() { if (GUI.Button(new Rect(10, 10, 250, 60), "Change to scene2")) { Debug.Log("Exit1"); SceneManager.LoadScene(1); } }
// generate a message before the Start() function void OnEnable() { Debug.Log("OnEnable1"); }
// generate a message when the game shuts down or switches to another Scene // or switched to ExampleClass2 void OnDestroy() { Debug.Log("OnDestroy1"); } }
ExampleClass2:
using UnityEngine; using UnityEngine.UI;
public class ExampleClass2 : MonoBehaviour { void Start() { Debug.Log("Start2"); }
void OnEnable() { Debug.Log("OnEnable2"); }
// generate a message when the game shuts down void OnDestroy() { Debug.Log("OnDestroy2"); } }
OnDestroy cannot be a co-routine.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.