Unity MonoBehaviour Singleton

时间:2013-11-26 18:00:40

标签: design-patterns unity3d

通常你可以这样创建一个Singleton:

public class Single
{
    public static Single _instance;

    public static Single GetInstance(){...}
}

问题是当你在Unity中推广MonoBehaviour类时如何创建它?

public class Single : MonoBehaviour
{
}

上面的常规代码无效。

编辑:是的问题是我不能在MonoBehaviour上打电话给新人。

2 个答案:

答案 0 :(得分:3)

对于未来的帖子,您会发布为什么或如何无法发挥作用。但是,我过去遇到过这个问题,所以我知道它是什么。您无法使用_instance初始化new,因为您无法在 MonoBehaviour 中呼叫new


解决方案

在你的虚空Awake()中添加以下行:

void Awake()
{
    _instance = this;
}

额外代码

显然,您的GetInstance()功能现在看起来会略有不同。请注意,我们不再像通常那样检查实例是否等于null。

public static Single GetInstance()
{
    return _instance.
}

答案 1 :(得分:-1)

我编写了一个单例类,可以轻松创建单例对象。它是一个MonoBehaviour脚本,所以你可以使用Coroutines。

下载this class,将其添加到您的项目中,然后创建扩展它的单例:

public class MySingleton : Singleton<MySingleton> {
  protected MySingleton () {} // guarantee this will be always a singleton only - can't use the constructor!

  public string globalVar;

  void Awake () {
      Debug.Log("Awoke Singleton Instance: " + gameObject.GetInstanceID());
  }
}

现在你的MySingleton类是一个单例,你可以通过Instance调用它:

MySingleton.Instance.globalVar = "A";
Debug.Log ("globalVar: " + MySingleton.Instance.globalVar);

以下是完整的教程:http://www.bivis.com.br/2016/05/04/unity-reusable-singleton-tutorial/