using UnityEngine;
using System.Collections;
publicclass Sigleton{
publicstaticreadonly Sigleton Instance = new Sigleton();//readonly保证变量只能被赋值一次privateSigleton(){}
}
这种写法使用了C#语言的特性,readonly关键字。上面这种写法等价于下面这种
using UnityEngine;
using System.Collections;
publicclass Sigleton{
publicstaticreadonly Sigleton Instance;//readonly保证变量只能被赋值一次privateSigleton(){}
//缺点是静态构造函数只能被系统调用,且不能带参数,和修饰符static Sigleton(){
Instance = new Sigleton();
}
下面是个通用的
using UnityEngine;
using System.Collections;
publicabstractclass Singleton<T> where T:class,new (){
protectedstatic T _instance = null;
publicstatic T Instance{
get{
if(_instance==null)
_instance = new Singleton();
}
return _instance;
}
protectedSingleton(){
if(_instance!=null)
print(111);
Init();
}
publicvirtualvoidInit(){
}
}
using UnityEngine;
using System.Collections;
publicclass GameManager :Singleton<GameManager>{
publicint a;
publicint b;
//可以初始化数据publicoverridevoidInit(){
a = 111;
b = 222;
}
}
上面这些都是单独的类,下面这个是继承MonoBehaviour
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
publicclass GameManager : MonoBehaviour {
privatestatic GameManager _instance;
publicstatic GameManager Instance{
get{
return _instance;
}
}
// Use this for initializationvoid Awake () {
if (_instance == null) {
_instance = this;
DontDestroyOnLoad (gameObject);
}
elseif (_instance != this)
Destroy (gameObject);
}
}