单例是什么东西就不细说了,直接上代码吧。
分两个版本:
普通Class版
public class Singleton<T> where T : class, new()
{
private static T s_instance;
public static T Instance
{
get
{
if (Singleton<T>.s_instance == null)
{
Singleton<T>.CreateInstance();
}
return Singleton<T>.s_instance;
}
}
protected Singleton()
{
}
public static void CreateInstance()
{
if (Singleton<T>.s_instance == null)
{
Singleton<T>.s_instance = new T();
}
}
public static void DestroyInstance()
{
if (Singleton<T>.s_instance != null)
{
Singleton<T>.s_instance = (T) null;
}
}
public static T GetInstance()
{
if (Singleton<T>.s_instance == null)
{
Singleton<T>.CreateInstance();
}
return Singleton<T>.s_instance;
}
public static bool HasInstance()
{
return Singleton<T>.s_instance != null;
}
public virtual void Init()
{
}
public virtual void UnInit()
{
}
}
MonoBehavior版
public class MonoSingleton<T> : MonoBehaviour where T:MonoBehaviour
{
private static T s_instance;
public static T Instance
{
get
{
if (MonoSingleton<T>.s_instance == null)
{
MonoSingleton<T>.CreateInstance();
}
return MonoSingleton<T>.s_instance;
}
}
public static void CreateInstance()
{
if (MonoSingleton<T>.s_instance == null)
{
MonoSingleton<T>.s_instance = new GameObject().AddComponent<T>();
DontDestroyOnLoad(MonoSingleton<T>.s_instance);
}
}
public static void DestroyInstance()
{
if (MonoSingleton<T>.s_instance != null)
{
Object.Destroy(MonoSingleton<T>.s_instance);
MonoSingleton<T>.s_instance = null;
}
}
}
605

被折叠的 条评论
为什么被折叠?



