2016-10-15 1 views
1

В настоящее время у меня есть таймер, который имеет функцию DontDestroyOnLoad, чтобы он мог проходить через сцены, которым нужен таймер, мой вопрос: как я могу уничтожить свой таймер, когда игра загружает главную меню?Unity C#: уничтожить объект при загрузке новой сцены

+0

Если какой-либо из ответа ниже ответил на ваш вопрос, вы можете принять его. – Programmer

ответ

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() 
    } 
}