一传统单例?
? ? ? ? 1、mono单例:原则上能不用尽量不用,情况一:mono单例挂载的场景,单例也将被销毁。另一种情况a加载b场景,mono单例设置为切换场景不销毁,b场景保存单例。b切换回a场景,如果不进行判断,这时候a场景中会存在两个单例。总之mono单例在项目迭代中会情况比较复杂,可能会出现问题。
//mono单例
public class MonoSingleton<T>:MonoBehaviour where T:MonoBehaviour
{
private static T _single;
public static T Single;
{
get{
if(_single==null){
_single=FindObjectOfType();
if(_single==null)
Debug.LogError("场景中未找到类的对象,类名为"+typeof(T).Name);
}
return _single;
}
}
private void Awake(){
if(_single==null){
DontDestroyOnLoad(gameObject);
}else{
Destroy(gameObject);
}
}
}
? ? ? ? 2、c# class单例
//普通单例类
public class NormalSingleton<T> where T:class,new()
{
private static T _single;
public static T Single;
{
get{
if(_single==null){
T t=new T();
if(t is MonoBehaviour){
Debug.LogError("Mono类请使用MonoSingleton");
return null;
}
_signle=t;
}
return _single;
}
}
}
|