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

腳本裡的代碼是這樣的
void Start ()
{
DontDestroyOnLoad(this);
}
這段代碼隻有一個作用,那就是使test這個物體在切換場景的時候不被銷毀而保留下來
一開始我從Loading場景切換到Main場景,結果是這樣的
ok,現在看起來很正常,test被保留了下來
現在我在Main場景加一個按鈕,這個按鈕的作用是切換回Loading場景,然後我按下那個按鈕,現在場景被切換回了Loading場景,如圖
現在,你發現了什麼,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場景,現在的結果,如圖
這次隻有一個test物體,這樣就不會出現由Main場景切換回Loading場景時,産生兩個物體test了。