在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时就被挂起(并记录了局部变量的数据),等到下一帧,才再从这里运行
关于协程的简单记录就先到这里了,后面会不断补充的。
希望对你有帮助
欢迎访问我的博客:is-hash.com
商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢
来源:CSDN
作者:Luoluo964
链接:https://blog.csdn.net/m0_46378049/article/details/104776212