版本: Unity 6 (6000.0)
语言英语
  • C#

MonoBehaviour.OnDestroy()

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提供的每个建议修改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议修改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

描述

销毁附加的行为将导致游戏或场景接收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 不能是协程。