using UnityEngine;
using System.Collections;
public class Singleton <T> where T : new (){
private static T mInstance;
//注意构造函数 必须是无参数 且是public的
protected Singleton() { }
public static T Instance
{
get
{
if (mInstance == null)
{
mInstance = new T();
}
return mInstance;
}
}
//用完即可丢弃的方法 例如切换场景 清空资源
public virtual void Dispose()
{
}
}
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
protected static T mInstance = null;
public static T Instance
{
get
{
if (mInstance == null)
{
mInstance = FindObjectOfType<T>();
if (FindObjectsOfType<T>().Length > 1)
{
Debug.LogError("More than 1!");
return mInstance;
}
if (mInstance == null)
{
string instanceName = typeof(T).Name;
// Debug.Log("Instance Name: " + instanceName);
//GameObject instanceGO = GameObject.Find(instanceName);
//if (instanceGO == null)
// instanceGO = new GameObject(instanceName);
//mInstance = instanceGO.AddComponent<T>();
// DontDestroyOnLoad(instanceGO);
//Debug.Log("Add New Singleton " + mInstance.name + " in Game!");
}
else
{
// Debug.LogWarning("Already exist: " + mInstance.name);
}
}
return mInstance;
}
}
protected virtual void OnDestroy()
{
mInstance = null;
}
}
using System.Collections;
public class Singleton <T> where T : new (){
private static T mInstance;
//注意构造函数 必须是无参数 且是public的
protected Singleton() { }
public static T Instance
{
get
{
if (mInstance == null)
{
mInstance = new T();
}
return mInstance;
}
}
//用完即可丢弃的方法 例如切换场景 清空资源
public virtual void Dispose()
{
}
}
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
protected static T mInstance = null;
public static T Instance
{
get
{
if (mInstance == null)
{
mInstance = FindObjectOfType<T>();
if (FindObjectsOfType<T>().Length > 1)
{
Debug.LogError("More than 1!");
return mInstance;
}
if (mInstance == null)
{
string instanceName = typeof(T).Name;
// Debug.Log("Instance Name: " + instanceName);
//GameObject instanceGO = GameObject.Find(instanceName);
//if (instanceGO == null)
// instanceGO = new GameObject(instanceName);
//mInstance = instanceGO.AddComponent<T>();
// DontDestroyOnLoad(instanceGO);
//Debug.Log("Add New Singleton " + mInstance.name + " in Game!");
}
else
{
// Debug.LogWarning("Already exist: " + mInstance.name);
}
}
return mInstance;
}
}
protected virtual void OnDestroy()
{
mInstance = null;
}
}