协程Coroutine
协程可以实现异步执行操作,但它实际上是依赖于Unity主线程的,也就是说不会产生新的线程,所以它的操作相对线程是简单的。
要定义一个协程,按照如下的形式:
IEnumerator [协程名]()
{
yield return new WaitForSeconds(1); //等待1s
yield break; //结束协程
}
若要操作协程,可以通过如下的一些函数:
StartCoroutine([协程方法]); //开启协程
StopCoroutine([协程方法]); //关闭特定协程
StopAllCoroutines(); //关闭所有协程
yield return
yield return可以在协程中进行操作,实现异步的效果,以下有一些常见的内容:
//暂停到下一帧再继续执行
yield return null;
//暂停指定的秒数后再继续执行
yield return new WaitForSeconds(2f); // 等待2秒
//在当前帧所有渲染操作完成后执行,即在当前帧的最后
yield return new WaitForEndOfFrame();
//暂停到下一次物理帧(FixedUpdate)更新时继续执行。
yield return new WaitForFixedUpdate();
//等待满足指定条件时继续执行
yield return new WaitUntil(() => true == true);
//只要条件满足就持续等待,直到条件不再满足时继续执行
yield return new WaitWhile(() => false == true);
//等待另一个协程执行完毕再继续执行
yield return StartCoroutine([协程名]());
协程的案例
协程可以用来进行异步操作,如进行延迟操作或开设一个计时器。
这里有一个关于秒表的参考代码:
IEnumerator Timer()
{
int time = 0; //初始化时间变量
while (true)
{
yield return new WaitForSeconds(1); //每秒增加1
Debug.Log(++time); //打印当前记录值
}
}