在U3D开发过程中,避免不了要创建单例,每次使用都需要去声明比较麻烦,需要建立一个基类,每次使用就继承一下就行,比较方便。通常有两种,一种是不需要继承mono,无需挂载,另一种是需要继承mono,挂在在物体上,用到组件上的一些生命周期。
- 不继承MonoBehaviour基类
public class BaseSingleton<T> where T : new()
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
instance = new T();
}
return instance;
}
}
}
继承与使用:
public class WDataManager : BaseSingleton<WUIManager>
{}
WDataManager.Instance.Test();
- 继承MonoBehaviour基类
public class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
instance = (T)FindObjectOfType(typeof(T));
if (instance == null)
{
//创建一个新的游戏对象并把单例组件挂在到游戏物体上
var singletonObj = new GameObject(typeof(T).ToString() + "(Singleton)");
instance = singletonObj.AddComponent<T>();
DontDestroyOnLoad(singletonObj);
}
}
return instance;
}
}
}
继承与使用:
public class WUIManager : MonoSingleton<WUIManager>
{}
WUIManager.Instance.Test();