Unity教程之-不创建GameObject也能使用协程Coroutine

 

在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教程到此结束,下篇我们再会!