协程全称是协同程序,它的作用是在主程序上开启一段协同程序,看起来有点像多线程,但其实它还是运行在主线程之上的。
协程有几个特点:
1.它有一个特定的返回类型叫做IEnumerator
2.因为特殊的返回类型所以必须要有返回,但返回不是简单的return而是yield return后面可以是null,可以是WaitForSeconds(等待多少秒),WaitForFixedUpdate(在FixedUpdate每一帧之后),还可以是另外一个协程……
3.协程的开启需要用StartCoroutine(里面可以写方法名,也可以直接调用方法),可以用Stop(All)Coroutine来停止
4.协程的逻辑根据暂停来,每次暂停都可以执行新的操作
5.协程不会因为yield return而中断执行,或者执行到一些没有用的代码就返回,它会继续执行到最后
下面演示一个简单的协程的使用
void Start()
{
StartCoroutine(Test01());
//StartCoroutine("Test01");
}
IEnumerator Test01(){
Debug.Log("协同");
yield return new WaitForSeconds(2f);
Debug.Log("程序");
yield return null;
Debug.Log("继续运行");
}
可以看到打印了“协同”后过了两秒才打印“程序”,而且即使后面是yield return null 它也继续执行了。
协程可以用来作为优化的一种手段,比如游戏中一些需要不断更新但又不需要像Update这么频繁的时候。