В настоящее время у меня есть таймер, который имеет функцию DontDestroyOnLoad
, чтобы он мог проходить через сцены, которым нужен таймер, мой вопрос: как я могу уничтожить свой таймер, когда игра загружает главную меню?Unity C#: уничтожить объект при загрузке новой сцены
1
A
ответ
1
В функции Пуск таймера, найти объекты, держащие сценарий и проверьте, есть ли более двух из этих объектов:
private void Start()
{
Timer[] timers = FindObjectsOfType(typeof(Timer)) as Timer[];
if(timers.Length > 1)
Destroy(gameObject) ;
}
Таймер уже в сцене из-за DontDestroyOnLoad не будет вызовите функцию Start (поскольку она вызывается только один раз в жизненном цикле скрипта), таким образом, она не будет уничтожена
1
У вас есть два варианта.
Вы можете позвонить по номеру Destroy(gameObject);
или DestroyImmediate()
в свой скрипт таймера. Он уничтожит этот таймер и GameObject.
Другим вариантом является функция, которая остановит таймер, а затем сбросит параметры таймера по умолчанию. Это хорошо с точки зрения управления памятью на мобильных устройствах.
public class Timer: MonoBehaviour
{
public void StopAndResetTimer()
{
//Stop Timer
//Reset Timer variables
}
public void DestroyTimer()
{
Destroy(gameObject);
// DestroyImmediate(gameObject);
}
}
Затем в главном меню скрипта
public class MainMenu: MonoBehaviour
{
Timer timerScript;
void Start()
{
timerScript = GameObject.Find("GameObjectTimerIsAttachedTo").GetComponent<Timer>();
timerScript.DestroyTimer();
//Or option 2
timerScript.StopAndResetTimer()
}
}
Если какой-либо из ответа ниже ответил на ваш вопрос, вы можете принять его. – Programmer