厦门知名做企业网站设计的公司友情链接交换的方法
作用:使不继承MonoBehaviour的类能够开启协程,并且可以使用FixedUpdate、Update、LateUpdate进行每帧更新。
原理:
1、在场景中创建一个继承MonoBehaviour的“执行者”脚本,这个脚本就专门用来开启协程和监听帧更新。
2、Mono管理器访问这个“执行者”脚本,就可以实现所需的效果。
创建一个空物体,挂载一个继承自MonoBehaviour 的脚本(没有任何方法也可以)
没有继承的那个脚本代码这样写:
public void Show(){GameObject go = GameObject.Find("MonoController");go.AddComponent<MonoController>().StartCoroutine(MyCoroutine());}IEnumerator MyCoroutine(){while (true){Debug.Log("协程执行中");yield return null;}}
就可以调用了
Mono管理器开启协程
public class MonoController : MonoBehaviour
{}
MonoManager 管理类,自动创建场景物体并挂载继承有Mono的脚本
继承SingletonPatternBase 作为一个 单例存在
public class MonoManager : SingletonPatternBase<MonoManager>
{private MonoManager() { }private MonoController monoController;public MonoController MonoController{get{if (monoController == null){GameObject go = new GameObject(typeof(MonoController).Name);monoController = go.AddComponent<MonoController>();}return monoController;}}//一个专门让外部用来开启协程的方法public Coroutine StartCoroutine(IEnumerator routine){return MonoController.StartCoroutine(routine);}
Mono管理器停止协程
//停止协程的方法public void StopCoroutine(IEnumerator routine){MonoController.StopCoroutine(routine);}//停止协程的方法 重载public void StopCoroutine(Coroutine coroutine){MonoController.StopCoroutine(coroutine);}//停止所有协程的方法public void StopAllCoroutine(){MonoController.StopAllCoroutines();}
在具体的脚本里直接MonoManager.Instance.xxx方法就可以执行