Unity中的协程 简单理解

在Unity中有这样一个概念——协程

我理解的协程概念,就是一个方法,但是可以将这个方法的中间过程挂起,过一段时间或者一些操作后再继续这个方法。


通常,协程的结构就是这样的:

IEnumerator Test()  
{  
    /*内容

    内容*/
    yield return 0; 
}
开启协程 StartCoroutine(“协程方法名“);
关闭协程 StopCoroutine(“协程方法名“);
对于一些有参数的协程,也可以这样做:
开启协程 Coroutine c=StartCoroutine(“协程方法名“);
关闭协程 StopCoroutine(c);

IEnumerator 是C#的一个迭代器,你可以把它当成指向一个序列的某个节点的指针,它提供了两个重要的接口,分别是Current(返回当前指向的元素)和 MoveNext()(将指针向前移动一个单位,如果移动成功,则返回true)

yield就是这个协程方法里起到协程作用的重要关键字,就是它将这个方法挂起,后面跟不同的东西会有不同的含义,目前常见如下:

  • yiled return 0: 0可以换成任意的int类型的值,都是当前暂停一帧,从下一帧开始执行
  • yield return new WaitForSeconds(sec): 即这个协程方法挂起等待sec秒的时间
  • yield return StartCoroutine(Other( )); Other是另一个协程,即协程是可以嵌套的

另外注意,协程是可以有参数的,但是参数不允许使用out或ref关键字,协程也可以重载。

 


对于协程的功能还有不理解可以看这个例子:

void  showTest1()
{
    for (int i = 0; i < 5; i++)
    {
        Debug.Log("i+1");
    }
}
IEnumerator showTest2()
{
    for (int i = 0; i < 5; i++)
    {
        Debug.Log("i+1");
        yield return 0;
    }
}

假如上面两个方法都在Start里调用,则输出结果如下:

第几帧 showTest1的输出 showTest2的输出
1 1 2 3 4 5 1
2 2
3 3
4 4
5 5

这样一弄,是不是就明白很多,showTest2是个协程方法,它在执行到yield时就被挂起(并记录了局部变量的数据),等到下一帧,才再从这里运行

 


关于协程的简单记录就先到这里了,后面会不断补充的。

 

 

 

 

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

发表评论