Singleton UnitySingleton 一个没有 mononehaviour 一个有
public abstract class Singleton<T> where T : class, new()
{
private static T m_Instance = null;
private static object m_Lock = new object();
public static T Instance
{
get
{
if (m_Instance == null)
{
lock (m_Lock)
{
if (m_Instance == null)
{
m_Instance = new T();
}
}
}
return m_Instance;
}
}
public virtual void Initialize() { }
public static void DestroyInstance()
{
if (m_Instance != null)
{
(m_Instance as Singleton<T>).Destroy();
m_Instance = (T)((object)null);
}
}
public virtual void Destroy() { }
}
public abstract class LogicSingleton<T> where T : class, new()
{
private static T m_Instance = null;
public static T Instance
{
get
{
return m_Instance;
}
}
public static void CreateInstance()
{
if (m_Instance == null)
{
m_Instance = new T();
}
}
public virtual void Initialize() { }
public static void DestroyInstance()
{
if (m_Instance != null)
{
(m_Instance as LogicSingleton<T>).Destroy();
m_Instance = (T)((object)null);
}
}
public virtual void Destroy() { }
}
public class UnitySingleton<T> : MonoBehaviour where T : Component
{
private static T m_Instance = null;
public static T Instance
{
get
{
if (m_Instance == null)
{
m_Instance = FindObjectOfType(typeof(T)) as T;
if (m_Instance == null)
{
GameObject obj = new GameObject(typeof(T).Name);
m_Instance = (T)obj.AddComponent(typeof(T));
}
}
return m_Instance;
}
}
public virtual void Awake()
{
if (m_Instance == null)
{
m_Instance = this as T;
}
}
public virtual void OnDestroy()
{
m_Instance = null;
}
public virtual void Initialize() { }
}