在unity3d中我们知道如果要想启动一个携程Coroutine,必须创建一个Gameobject或者脚本需继承自MonoBehaviour,那没本篇unity3d教程我们来做个CoroutineManager,不创建GameObject也能使用协程Coroutine,下面开始!
1、起因
————————————————————-
今天下午群友问怎么不创建GameObject使用协程。
就是,比如你有如下代码
public class Test
{
public IEnumerator DoAction()
{
yield return new WaitForSeconds(5);
Debug.Log("AAAAA");
yield return new WaitForSeconds(5);
Debug.Log("BBBBB");
}
}
怎样不创建GameObject就能调用DoAction这个协程。
————————————————————-
2、很简单的解决方法
————————————————————-
创建个CoroutineManagerMonoBehaviour
using System.Collections;
using UnityEngine;
namespace Com.Duoyu001.Base
{
internal class CoroutineManagerMonoBehaviour : MonoBehaviour
{
}
/* ==============================================================================
* 功能描述:协程管理器
* 创建日期:2015/04/29 17:58:09
* ==============================================================================*/
public class CoroutineManager
{
private static CoroutineManagerMonoBehaviour _CoroutineManagerMonoBehaviour;
static CoroutineManager()
{
Init();
}
public static void DoCoroutine(IEnumerator routine)
{
_CoroutineManagerMonoBehaviour.StartCoroutine(routine);
}
private static void Init()
{
var go = new GameObject();
go.name = "CoroutineManager";
_CoroutineManagerMonoBehaviour = go.AddComponent<CoroutineManagerMonoBehaviour>();
GameObject.DontDestroyOnLoad(go);
}
}
}
3、怎么使用
————————————————————-
找个地方调用下面代码
Com.Duoyu001.Base.CoroutineManager.DoCoroutine(new Test().DoAction());
好吧,说不创建,实际代码里面还是创建。不过不用你显式创建。那就这样吧。OK。本篇unity3d教程到此结束,下篇我们再会!