Описание
Уничтожение прикрепленного поведения приведет к тому, что игра или сцена получит 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");
}
// код, который генерирует сообщение каждую секунду
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);
}
}
// генерируем сообщение перед функцией Start()
void OnEnable()
{
Debug.Log("OnEnable1");
}
// генерировать сообщение, когда игра закрывается или переключается на другую Scene
// или переключился на ExampleClass2
void OnDestroy()
{
Debug.Log("OnDestroy1");
}
}
Примеркласс2:
using UnityEngine;
using UnityEngine.UI;
public class ExampleClass2 : MonoBehaviour
{
void Start()
{
Debug.Log("Start2");
}
void OnEnable()
{
Debug.Log("OnEnable2");
}
// генерировать сообщение, когда игра закрывается
void OnDestroy()
{
Debug.Log("OnDestroy2");
}
}
OnDestroy не может быть сопрограммой.