C#单例的写法:
(1)私有化构造方法
(2)内建静态实例
(3)公开静态方法给实例做初始化
在Unity中的运用
private static Singleton msingleton;
//Unity中大多数情况下私有化方法并不有关键的作用,所以可以省略不写
//默认构造方法使为了给实例的对象付初始值,在Unity中,实例的对象就是场景中的对象,很多组件需要我们去挂载,所以默认构造方法并不实用
Singleton()
{
}
public static Singeleton SingletonAtrribute{
get{
//如果msingleton为空,并没有产生实例
if(msingleton==null){
//就先找到Singleton这个类
singleton=GameObject.FindObjectOfType(typeOf(Singleton)) as Singleton;
//如果没有找到Singleton这个类
if(msingleton==null){
//新建一个GameObject
GameObject go= new GamaObject();
//并且给go添加Singleton组件
go.AddComponent<Singleton>();
}
}
return msingleton;
}
}
单例和泛型的结合:方便在一个项目中重复使用单例
public class MonoSlingleton<T>:MonoBehaviar
where T:Component{
private static T t;
public static T instance{
get{
if(t==null){
t=GameObject.FindObjectOfType(typeOf(T)) asT;
if(t==null){
GameObject go= new GamaObject();
go.AddComponent<T>();
}
}
return t;
}
}
}