Version: 2021.3


销毁附加的行为将导致游戏或场景收到 OnDestroy

场景或游戏结束时,发生 OnDestroy。 从 Editor 内部运行时,停止播放模式将终止应用程序。终止应用程序时, 将执行 OnDestroy。而且,如果某个场景关闭并加载 新场景,将调用 OnDestroy
构建为独立应用程序时,如果场景结束, 将调用 OnDestroy。一个场景结束通常意味着加载一个新场景。

注意:只在以前处于活动状态的游戏对象上调用 OnDestroy

在以下脚本中,将显示 OnDestroy 的行为。在 ExampleClass1 内 运行时,将有一个按钮可用。按下该按钮后,将调用 OnDestroy,然后 切换到 /ExampleClass2/。一旦激活 /ExampleClass2/,在应用程序关闭时, 将使用 OnDestroy。如果 ExampleClass1 通过关闭应用程序而退出, 它将调用 OnDestroy。(在应用程序的构建和运行中,控制台将显示 输出到播放器日志的文本。)

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"); } }


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 不能作为协同程序使用。