什么是協程?
1、協程是一個分部執行,遇到條件(yield return 語句)會掛起,直到條件滿足才會被喚醒繼續執行后面的代碼。
2、Unity在每一幀(Frame)都會去處理對象上的協程。Unity主要是在Update后去處理協程(檢查協程的條件是否滿足),但也有寫特例。
什么情況是條件滿足?
在協程方法中使用 yield return 其實就是為了返回 IEnumerator對象,只有當這個對象的 MoveNext() 返回 false 時,即該 IEnumertator 的 Current 已經迭代到最后一個元素了,才會執行 yield return 后面的語句。也就是說, yield return 被會“翻譯”為一個 IEnmerator 對象。
以
var request = new WWW();
yield return request;
為例應該有以下內容才對:
int state;
bool MoveNext()
{
if(state == 0)
{
var request = new WWW();
state = 1;
}
return request.isDone ? false : true;
}
當請求完成后,MoveNext返回false,認為IEnumerator已經迭代完成,此時開始執行后續代碼。
感謝這樣的好文章:http://dsqiu.iteye.com/blog/2029701