coroutine這個(gè)功能是unity非常好用的功能纲菌,能解決類似線程的一些問(wèn)題试疙,而且不用考慮lock 和 同步的問(wèn)題柳弄,所以必須深入掌握coroutine的功能唱捣。
coroutine的使用場(chǎng)景
等待多久做某件事
等待某件事結(jié)束再做后續(xù)的事 tips:使用while(條件巧妙的做到)
coroutine不是線程两蟀,不會(huì)在unity中并行處理
這點(diǎn)必須了解清楚,很多同學(xué)會(huì)在這里迷糊震缭,其實(shí)這個(gè)功能只是c#
的yield的功勞赂毯。coroutine的調(diào)用仍然會(huì)在unity 主線程中調(diào)用。
簡(jiǎn)單寫個(gè)測(cè)試用例就知道了拣宰。
public class NewBehaviourScript : MonoBehaviour {
void Start () {
StartCoroutine(Test());
Debug.Log("after coroutine");
}
IEnumerator Test(){
for(int i=0; i<1000; i++){
Debug.Log(i);
}
yield return null;
Debug.Log("end test");
}
}
打印結(jié)果順序:#)打印1000次i的信息 --> after coroutine -->end test
從結(jié)果我們可以看到: courtine的卻是一個(gè)單線程的党涕,不然的話after coroutine的打印
是不會(huì)等到程序遇到y(tǒng)ield關(guān)鍵字暫停后繼續(xù)進(jìn)行的。所以之前的unity并行處理的理解
是錯(cuò)誤的徐裸,或者給你造成了假象遣鼓。
coroutine的調(diào)用時(shí)機(jī)
5555.png
看下unity的官方的coroutine的流程圖就可以明白了。croutine一般情況是在
update 后執(zhí)行的重贺。當(dāng)然unity 也提供了WaitForEndOfFrame 這種的功能。