销毁附加的行为将导致游戏或场景接收OnDestroy。
OnDestroy 在场景或游戏结束时发生。在编辑器中运行时停止播放模式将结束应用程序。当此结束发生时,将执行OnDestroy。此外,如果一个场景关闭并加载了新场景,则会调用OnDestroy。
当构建为独立应用程序时,OnDestroy 调用在场景结束时进行。场景结束通常意味着加载了新场景。
注意:OnDestroy 仅对以前处于活动状态的游戏对象调用。
在以下脚本中,展示了OnDestroy 的行为。在ExampleClass1
中运行时,可以使用一个按钮。使用此按钮调用OnDestroy,然后切换到ExampleClass2
。一旦ExampleClass2
处于活动状态,OnDestroy 将在应用程序关闭时使用。如果ExampleClass1
通过关闭应用程序退出,它将调用OnDestroy。(在应用程序的构建和运行中,控制台将文本输出显示到播放器日志中。)
警告:如果用户在移动平台上暂停您的应用程序,操作系统可能会退出应用程序以释放资源。在这种情况下,根据操作系统的不同,Unity 可能无法调用此方法。在移动平台上,最佳实践是不要依赖此方法来保存应用程序的状态。相反,将每次应用程序失去焦点视为应用程序退出,并使用MonoBehaviour.OnApplicationFocus 保存任何数据。
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 不能是协程。