因此,我在DontdesoryOnload的開始場景中管理這個管理器,管理所有的UI等。它遵循單例模式,所以如果我去場景2並返回到我的開始場景,第一位經理將保持不變,而新開場的經理人會認爲已經有一位經理人,並且會摧毀自己。Unity:Singleton DontDestoryOnLoad腳本虛假參考
從這裏我們調用Manager保持活着Manager-Singleton和按計劃銷燬經理Manager-Dead。
我遇到的問題是,在我的經理,單身的引用似乎是錯誤的參考。
當Manager-Dead按計劃銷燬時,如果我訪問我的Manager-Singleton下的公共GameObject,它會向我顯示一個錯誤。如果我點擊Inspector中的References字段,它會將我引導到正確的Gameobject,這個Gameobject根本就不會失效。但是,如果我避免Manager-Dead被破壞(所以在一個場景中會有兩個管理員),代碼工作得很好。
我知道你可能會想,如果場景中有兩個管理員,可能會出現UI重疊,以便我可以單擊ManagerDead的按鈕並訪問其引用。所以在我回到開始場景後,我手動禁用了ManagerDead。事實證明,ManagerSingleton正在改變ManagerDead的用戶界面!
我真的搞不清楚它出錯的地方。任何建議,將不勝感激。
以下是我的一些代碼的情況下,他們可能是有用的:
[RequireComponent(typeof(UIManager))]
[RequireComponent(typeof(DataManager))]
[RequireComponent(typeof(StateManager))]
public class Managers : MonoBehaviour {
private static UIManager _UIManager;
public static UIManager UI
{
get { return _UIManager; }
}
private static DataManager _DataManager;
public static DataManager Data
{
get { return _DataManager; }
}
private static StateManager _StateManager;
public static StateManager State
{
get { return _StateManager; }
}
public string debugString = "";
void Awake(){
//Only one dataControl obj is allowed to exist and pass along.
if (GameObject.FindObjectsOfType<Managers>().Length > 1) {
Destroy (gameObject);
} else {
DontDestroyOnLoad (gameObject);
}
_UIManager = GetComponent<UIManager>(); //!!!!! This is a Singleton class.
_DataManager = GetComponent<DataManager>();
_StateManager = GetComponent<StateManager>();
}
}