游戏中有些数据需要在整个程序lifetime中一直保持,即便切换Scene等,也不能注销。这时就可以使用单例模式Singleton
下面是源自EasyTouch插件中的定义模版单例抽象类
using UnityEngine;
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
private static T m_Instance = null;
public static T instance
{
get
{
if( m_Instance == null )
{
m_Instance = GameObject.FindObjectOfType(typeof(T)) as T;
if( m_Instance == null )
m_Instance = new GameObject("Singleton of " + typeof(T).ToString(),
typeof(T)).GetComponent<T>();
}
return m_Instance;
}
}
private void Awake()
{
if( m_Instance == null )
m_Instance = this as T;
}
private void OnApplicationQuit()
{
m_Instance = null;
}
}
当我们需要一个单例,则
public class TaskManager : MonoSingleton<TaskManager>
{
...
}