c# – Unity单例管理器类

在Unity中,什么是一个好的方法来创建一个单例游戏管理器,可以访问到任何地方作为一个全局类,静态变量将吐出相同的常量值,每个类拉这些值?在Unity中实现它的方式是什么?我必须将它附加到GameObject吗?它可以只是在一个文件夹中,而不是在场景中的视觉?
喜欢总是:这取决于。我使用两种类型的单例,附加到GameObject的组件和不是从MonoBehaviour派生的独立类。 IMO的总体问题是如何绑定到场景,游戏对象的生命周期……不要忘记有时更方便的是一个组件,特别是引用其他MonoBehaviour对象更容易和更安全。

>有一些类只需要提供一些值,例如一个config类,当调用时需要从持久层加载设置。我将这些类设计为简单的单例。
>另一方面,一些对象需要知道场景何时开始,即调用Start,或者必须在Update或其他方法中执行操作。然后我实现他们作为组件,并将它们附加到一个游戏对象,幸存下来装载新的场景。

我设计了基于组件的单例(类型2),包括两个部分:一个持久的GameObject称为Main,它保存所有组件和一个名为MainComponentManager的扁平单例(类型1),用于管理它。一些演示代码:

public class MainComponentManger {
    private static MainComponentManger instance;
    public static void CreateInstance () {
        if (instance == null) {
            instance = new MainComponentManger ();
            GameObject go = GameObject.Find ("Main");
            if (go == null) {
                go = new GameObject ("Main");
                instance.main = go;
                // important: make game object persistent:
                Object.DontDestroyOnLoad (go);
            }
            // trigger instantiation of other singletons
            Component c = MenuManager.SharedInstance;
            // ...
        }
    }

    GameObject main;

    public static MainComponentManger SharedInstance {
        get {
            if (instance == null) {
                CreateInstance ();
            }
            return instance;
        }
    }

    public static T AddMainComponent <T> () where T : UnityEngine.Component {
        T t = SharedInstance.main.GetComponent<T> ();
        if (t != null) {
            return t;
        }
        return SharedInstance.main.AddComponent <T> ();
    }

现在其他想要注册为主要组件的单例看起来像:

public class AudioManager : MonoBehaviour {
    private static AudioManager instance = null;
    public static AudioManager SharedInstance {
        get {
            if (instance == null) {
                instance = MainComponentManger.AddMainComponent<AudioManager> ();
            }
            return instance;
        }
    }
http://stackoverflow.com/questions/13730112/unity-singleton-manager-classes

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – Unity单例管理器类