描述

销毁附加的行为将导致游戏或场景收到 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.

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

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

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