MonoBehaviour.OnDestroy()

本文详细解析了Unity引擎中MonoBehaviour.OnDestroy()方法的工作原理和使用场景。OnDestroy在游戏场景结束或游戏对象被销毁时调用,适用于游戏开发中资源释放和清理操作。文章通过示例代码展示了如何利用OnDestroy进行有效的资源管理。

MonoBehaviour.OnDestroy()

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDestroy.html

Description

Destroying the attached Behaviour will result in the game or Scene receiving 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.

Note: OnDestroy will only be called on game objects that have previously been active.



In the following scripts the behaviour of OnDestroy is shown. When running inside ExampleClass1 a button is available. Using this button calls OnDestroy and then switches to ExampleClass2. Once ExampleClass2 is active OnDestroy will be used when the application is closed. If ExampleClass1 quits by closing the application it will call OnDestroy. (In the build and run of the application the console displays the text output to the Player Log.)

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 cannot be a co-routine.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值