单例模式:
保证一个类只有一个实例,并且提供一个访问它的全局访问点。
如果交互总是建立在两个或多个脚本之间,互相使用脚本实例会越多越乱。如果交互都是在单例脚本上实现的,会降低耦合度。一些整个场景中只有一个而且又想方便的随时访问,例如管理音乐的脚本,管理各种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();