天天看點

Unity中DontDestroyOnLoad在切換場景時的坑點

在unity中我們經常要用到DontDestroyOnLoad來使一個gameobject在切換場景的時候不被銷毀而保留下來,但是有時會遇到這樣的情況,在Loading場景建立一個空物體,我給它起名叫test,上面挂一個腳本,如圖

Unity中DontDestroyOnLoad在切換場景時的坑點

腳本裡的代碼是這樣的

void Start () 
{
    DontDestroyOnLoad(this);
}
           

這段代碼隻有一個作用,那就是使test這個物體在切換場景的時候不被銷毀而保留下來

一開始我從Loading場景切換到Main場景,結果是這樣的

Unity中DontDestroyOnLoad在切換場景時的坑點

ok,現在看起來很正常,test被保留了下來

現在我在Main場景加一個按鈕,這個按鈕的作用是切換回Loading場景,然後我按下那個按鈕,現在場景被切換回了Loading場景,如圖

Unity中DontDestroyOnLoad在切換場景時的坑點

現在,你發現了什麼,test物體變成了兩個!

這絕對不是我們想要的,那麼如何解決這個問題呢?

可以在想要切換場景保留的物體上加一個單例類,當然啦,這個類最好是有實際的作用,這個單例類實作如下

private static RequestManager _instance;
public static RequestManager Instance { get { return _instance; } }
private void Awake()
{
	if (_instance != null)
	{
		Destroy(this.gameObject); return;
	}
	else
	{
		_instance = this;
	}
}
           

這裡的RequestManager就是你要加的單例類的類名,你可以更換成你的單例類的類名,然後把他挂載到test物體上,然後我們重新測試一下,由Loading場景切換到Main場景,再點選按鈕切換回Loading場景,現在的結果,如圖

Unity中DontDestroyOnLoad在切換場景時的坑點

這次隻有一個test物體,這樣就不會出現由Main場景切換回Loading場景時,産生兩個物體test了。