协同注意事项:
1.协同的返回值类型必须是IEnumerator
2.协同的参数不能加关键字ref或者out
3.在c#脚本中必须使用StartCoroutine来启动协同
4.yield语句要用yield return来代替
5.在函数Update和FixedUpdate中不能使用yield语句,但是可以启动协同.如果在Update中启动协同,会可能出现不等这个协同执行就已经再次启动这个协同了。
yield语句在协同中的典型用法:
yield return null:
等待下一帧中的Update执行完毕之后再运行
yield return new WaitForSeconds(10):
延迟10秒后在继续执行
yield return new WaitForFixedUpdate():
等待所有脚本中的FixedUpdate函数结束后再继续执行
yield return new WaitForEndOfFrame():
等待该帧中的所有Camrea和GUI对象渲染完毕,在帧被显示到屏幕上之前恢复执行前面的代码
yield return new WWW(url):
等待url下载完成后再继续执行
yield return StartCoroutine(MyFunc()):
等待协同MyFunc结束后再执行
在协同函数中,yield语句就像是一个红绿灯,在遇到yield语句之前都是绿灯,协同函数正常按顺序执行,但是碰到yield语句时则亮红灯,协同程序此时停止执行,当中断指令结束后红灯熄灭,绿灯变亮,协同函数继续执行余下的代码。
IEnumerator CoroutineProcedure(){
print("绿灯");
print("顺序执行");
print("亮红灯");
yield return new WaitForSeconds(2);
等待两秒
print("绿灯");
}
使用示例代码
void Update(){
StartCoroutine(wait());
}
IEnumerator wait(){
yield renturn new WaitForSeconds(5s);
}
这段代码是启动一个wait的协同函数,这个函数是等待5秒