华强北做电子网站建设,wordpress提示无法创建目录,购物系统顺序图,150m网站空间流量大吗作用#xff1a;让没有继承MONO的类可以开启协程#xff0c;可以update更新#xff0c;可以统一管理update
MonoController脚本继承MonoBehaviour使得脚本过场不移除#xff0c;并通过UnityAction可以添加多个函数#xff08;多播委托#xff09;#xff0c;实现Update…作用让没有继承MONO的类可以开启协程可以update更新可以统一管理update
MonoController脚本继承MonoBehaviour使得脚本过场不移除并通过UnityAction可以添加多个函数多播委托实现Update更新以及统一管理。
/// summary
/// Mono的管理者
/// 1.声明周期函数
/// 2.事件
/// 3.协程
/// /summary
public class MonoController : MonoBehaviour {private event UnityAction updateEvent;// Use this for initializationvoid Start () {DontDestroyOnLoad(this.gameObject);}// Update is called once per framevoid Update () {if (updateEvent ! null)updateEvent();}/// summary/// 给外部提供的 添加帧更新事件的函数/// /summary/// param namefun/parampublic void AddUpdateListener(UnityAction fun){updateEvent fun;}/// summary/// 提供给外部 用于移除帧更新事件函数/// /summary/// param namefun/parampublic void RemoveUpdateListener(UnityAction fun){updateEvent - fun;}
}MonoMgr通过单例模式给外部提供添加帧更新事件、添加协程的管理。 /// summary
/// 1.可以提供给外部添加帧更新事件的方法
/// 2.可以提供给外部添加 协程的方法
/// /summary
public class MonoMgr : SingletonMonoMgr
{private MonoController controller;public MonoMgr(){//保证了MonoController对象的唯一性GameObject obj new GameObject(MonoController);controller obj.AddComponentMonoController();}/// summary/// 给外部提供的 添加帧更新事件的函数/// /summary/// param namefun/parampublic void AddUpdateListener(UnityAction fun){controller.AddUpdateListener(fun);}/// summary/// 提供给外部 用于移除帧更新事件函数/// /summary/// param namefun/parampublic void RemoveUpdateListener(UnityAction fun){controller.RemoveUpdateListener(fun);}public Coroutine StartCoroutine(IEnumerator routine){return controller.StartCoroutine(routine);}public Coroutine StartCoroutine(string methodName, [DefaultValue(null)] object value){return controller.StartCoroutine(methodName, value);}public Coroutine StartCoroutine(string methodName){return controller.StartCoroutine(methodName);}
}编写测试脚本将脚本挂载到游戏物体上。
public class myTest
{public myTest(){MonoMgr.GetInstance().StartCoroutine(Start());}public void Update(){Debug.Log(更新了);}IEnumerator Start(){yield return new WaitForSeconds(1f);Debug.Log(协程执行了);}}
public class MonoTest : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){myTest test new myTest();MonoMgr.GetInstance().AddUpdateListener(test.Update);}
}