單例模式:
保證一個類只有一個實例,並且提供一個訪問它的全局訪問點。
如果交互總是建立在兩個或多個腳本之間,互相使用腳本實例會越多越亂。如果交互都是在單例腳本上實現的,會降低耦合度。一些整個場景中只有一個而且又想方便的隨時訪問,例如管理音樂的腳本,管理各種UI的腳本,管理
場景切換的腳本…
using UnityEngine;
using System.Collections;
public class UnitySingleton<T> : MonoBehaviour //泛型類,T代表通用數據類型
where T:Component//T繼承於Component
{
private static T _instance;
public static T instance{//全局訪問點
get{
if(_instance==null){
_instance=FindObjectOfType(typeof(T))as T;
if(_instance==null){
GameObject obj= new GameObject();
obj.hideFlags=HideFlags.HideAndDontSave;
_instance = obj.AddComponent (typeof(T)) as T;
}
}
return _instance;
}
}
public virtual void Awake(){
DontDestroyOnLoad (this.gameObject);
if (_instance == null) {
_instance = this as T;
}
}
}
創建單例類
public class GameManager : UnitySingleton<GameManager> {
public void Hello(){
...
}
}
調用
GameManager.instance.Hello();