一:前言
我們經常要用到DontDestroyOnLoad來使一個GameObject在切換場景的時候不被銷毀
例如現在有兩個場景Scene1和Scene2,在Scene1的GameManager腳本的Start方法中呼叫了DontDestroyOnLoad(gameObject),接著切換到Scene2,會發現GameManager物件沒有被銷毀,但當從Scene2切換到Scene1時,會多出一個GameManager物件,每次進入到Scenen1時都會多一個GameManager物件
這是因為每次進入到Scene1時,都會執行Start方法中的DontDestroyOnLoad方法,而之前的GameManager物件沒有被釋放,所以會又多出一個GameManager物件
二:解決方法一
創建一個初始化的場景,在初始化場景里面的某個游戲物件的全域腳本中,把所有游戲物件全部設定成DontDestroyOnLoad,也就是切換場景時不銷毀,接著進入到第一個游戲場景,也就是說邏輯永遠不會再回傳初始化場景,也就不會存在來回切場景DontDestroyOnLoad沒有洗掉的問題
三:解決方法二
判斷一下參考是否為空,如果為空再設定為DontDestroyOnLoad,如果不為空則洗掉此游戲物體
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; set; }//單例
private void Awake()
{
if (Instance != null)
{
Destroy(gameObject);
}
else
{
Instance = this;
DontDestroyOnLoad(this);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/195267.html
標籤:其他
