什么是协程(Coroutine)
在unity中,协程的概念类似于线程,它是一种特殊的函数,能够中断(通过yield语句)执行当前的代码,直到中断指令(YieldInstruction)结束后再接着执行之前的代码。
典型用法
注意事项
- 协程的返回值必须是IEnunmerator
- 协程的参数不能加ref或out
- 在c#脚本中,必须通过StartCoroutine来驱动协程
- yield语句要用yield return 来代替
- StartCoroutine只能在monoBehaviour或其子类中使用
- StartCoroutine接收协程的名称(字符串)或IEnumerator实例作为参数
- 在Unity中,可以使用函数StopCoroutine来终止一个协程,但这种方法只适用于使用协程的名称作为参数启动的协程。使用StopAllCoroutine可以终止该monoBehaviour中的所有协程。还有一个不常用的方法来终止协程,即将协程所在的游戏对象的active属性设置为false,但是当再次将active改为TRUE时,协程不会自动启动。
- yield return 语句不能用在try-catch语句块中,但可以用在try-finally中的try语句块中
- yield return语句不能放在匿名方法中
- yield return语句不能放在unsafe语句块中
示例代码
IEnumerator WaitAndPrint()
{
yield return new WaitForSeconds(1);//WaitForSeconds()受Time.timeScale影响,当Time.timeScale为0时,yield return new WaitForSeconds(n) 将失效
print("WaitAndPrint");
}
IEnumerator Download()
{
string url = "http://download.csdn.net/detail/sakurallj/9926053";
WWW w =new WWW(url);
yield return w;
if (w!=null)
{
Debug.Log(w.text);
}
StopAllCoroutines();
}
参考
Unity官方案例精讲的协程章节,下载地址在这里