私はDontdesoryOnload、そのマネージャー、すべてのUIなどでスタート・シーンにこのマネージャーを持っています。シングルトン・パターンに従っています。シーン2に行って開始シーンに戻ると最初のマネージャーは同じままであり、新しく開かれた開始シーンのマネージャーは、すでにマネージャーがいると分かり、それ自身を破壊します。Unity:シングルトンDontDestoryOnLoadスクリプトfalse参照
ここから、マネージャーは存続しているマネージャーシングルトンと、計画マネージャーデッドとして破棄されたマネージャーとしましょう。
私が抱えている問題は、私のマネージャー - シングルトンの参照が誤って参照されているようです。
Manager-Deadが計画どおりに破棄された場合、Manager-Singletonの下でPublic GameObjectにアクセスすると、エラーが表示されます。 InspectorのReferencesフィールドをクリックすると、まったく破壊されていない正しいGameObjectにつながります。私が破壊されるからマネージャー・デッド避ける場合
MissingReferenceException: The object of type 'GameObject' has been destroyed, but you are still trying to access it.
しかし、(だから、1つのシーンで2つのマネージャが存在します)、コードがうまく働きました。
シーンに2人のマネージャーがいる場合、ManagerDeadのボタンをクリックしてその参照にアクセスするようにUIオーバーラップが存在する可能性があります。だから私がスタートシーンに戻った後、私は手動でManagerDeadを無効にします。 ManagerSingletonがManagerDeadのUIを変更していることが判明しました!
どこが間違っているのか本当に分かりませんでした。任意の提案をいただければ幸いです。続き
は、彼らが役に立つかもしれない場合は、私のコードの一部です:解決
[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>();
}
}