MonoBehaviour.OnDestroy()
Описание
Вызывается, когда GameObject или компонент собирается быть уничтожен.
OnDestroy вызывается в следующих сценариях:
- Когда компонент или его родитель GameObject явно уничтожен с Object.Destroy.
- Когда сцена заканчивается или разгружается, все GameObjects, не сохраненные при помощи вызова Object.DontDestroyOnLoad уничтожаются, и их MonoBehaviours получают
OnDestroy. Это включает в себя закрытие и открытие сцен в Редакторе, или с помощью SceneManager.UnloadSceneAsync и SceneManager.LoadScene. - При выходе из приложения времени выполнения или выходе из режима воспроизведения в Редакторе.
Примечание: OnDestroy вызывается только на GameObjects, которые были активны ранее.OnDestroy не может быть короутин.
Предупреждение: если пользователь сворачивает приложение на мобильной платформе, операционная система может завершить его, чтобы освободить ресурсы. В этом случае, в зависимости от операционной системы, Unity может не успеть вызвать этот метод. На мобильных платформах не стоит полагаться на него для сохранения состояния приложения. Вместо этого считайте любую потерю фокуса выходом из приложения и используйте MonoBehaviour.OnApplicationFocus для сохранения любых данных.
Дополнительные ресурсы: MonoBehaviour.OnDisable.
// ExampleClass1 includes a button to switch scene, which calls OnDestroy and then switches to // ExampleClass2. Once ExampleClass2 is active, OnDestroy will be called when the application closes. 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"); } }