繁体   English   中英

Unity:Singleton DontDestoryOnLoad脚本错误引用

[英]Unity: Singleton DontDestoryOnLoad script false reference

因此,我在DontdesoryOnload的起始场景中有一位经理,该经理负责所有UI,等等。它遵循单例模式,因此,如果我转到场景2并返回到起始场景,则第一个经理将保持不变,并且在新打开的启动场景中,经理将认为已经有一个经理,并自行销毁。

在这里,我们将Manager称为存活的Manager-Singleton,并将其销毁为计划的Manager-Dead。

我遇到的问题是Manager-Singleton中的引用似乎是虚假引用。

当按计划销毁Manager-Dead时,如果我在Manager-Singleton下访问一个公共GameObject,它将显示一个错误。 如果在“检查器”中单击那些“引用”字段,它将带我到没有被破坏的正确Gameobject。

MissingReferenceException: The object of type 'GameObject' has been destroyed, but you are still trying to access it.

但是,如果我避免销毁Manager-Dead(因此,在一个场景中将有两名经理),那么代码就可以正常工作。

我知道您可能在想,如果场景中有两个经理,则可能会有一个UI重叠,因此我可能单击ManagerDead的Button并访问其References。 因此,回到“开始”场景后,我手动禁用了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> ();
    }
}

解决了问题,组件引用部分是引起问题的原因,由于_UIManager等是静态的,这意味着在Manager-Dead的Awake函数中调用组件引用时,即使销毁了该引用,也将引用这些引用对其下面的GameObject。

这导致来自Manager-Singleton的静态_UIManager将被引用到Manager-Dead下的Destroyed Gameobjects。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM