为什么要使用单例模式
在我们的整个游戏生命周期当中,有很多对象从始至终有且只有一个。这个唯一的实例只需要生成一次,并且直到游戏结束才需要销毁。
单例模式一般应用于管理器类,或者是一些需要持久化存在的对象。
Unity3d中单例模式的实现方式
(一)c#当中实现单例模式的方法
因为单例本身的写法不是重点,所以这里就略过,直接上代码。
以下代码来自于MSDN。
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
以上代码是比较完整版本的c#单例。在unity当中,如果不需要使用到monobeheviour的话,可以使用这种方式来构建单例。
(二)如果是monobeheviour呢?
monobeheviour和一般的类有几个重要区别,体现在单例模式上有两点。
第一,monohehaviour不能使用构造函数进行实例化,只能挂载在GameObject上。
第二,当切换场景时,当前场景中的GameObject都会被销毁(LoadLe