Version: 2021.1

描述

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

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

注意:只在以前处于活动状态的游戏对象上调用 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 不能作为协同程序使用。