1.概念解釋
協程並不是一個獨立的線程,在Unity中,所有的語句都是在一個線程中執行的,也就是說,Unity是單線程的(具體的可以參見http://blog.csdn.net/alexander_xfl/article/details/41577625,這裏面有對單線程的粗略講解)。那麼協程到底是什麼呢?
官方的定義是這樣的:
A coroutine is a function that is executed partially and, presuming suitable conditions are met, will be resumed at some point in the future until its work is done
.協程是一個分部執行,遇到條件(yield return 語句)會掛起,直到條件滿足纔會被喚醒繼續執行後面的代碼。實際上協程在後臺與Update的執行原理是一樣的,每一幀都會去判斷是否滿足執行條件,並據此判斷是否執行。
2.作用與用法
a>延時一段時間
<span style="font-family:SimSun;">IEnumerator Fun() {
yield returnnewWaitForSeconds(5.0F);
//do something
}</span>
後面的代碼會在延時5秒之後執行
b>等待其他事件完成
<span style="font-family:SimSun;">IEnumerator Do() {
print("1");
yield returnnewWaitForSeconds(2);
print("2");
}
IEnumerator Fun() {
print("3")
yield returnStartCoroutine(Do());
print("4");
}</span>
執行Fun後,輸出順序爲:3 1 2 4
c>開啓一個僞線程做其他工作
<span style="font-family:SimSun;">IEnumerator Do() {
print("1");
yield return new WaitForSeconds(2);
print("2");
}
void Fun() {
print("3");
StartCoroutine(Do());
print("4");
}</span>
執行Fun後,輸出順序爲:3 1 4 2
d>等一幀
<span style="font-family:SimSun;">Ienumerator Do()
{
while(true)
{
print("happy");
yield return null;//等待這一幀結束
//yield return new WaitForFixedUpdate(); //等待所有腳本的fixedupdate執行完畢
//yield return new WaitForEndOfFrame();
}
}</span>
e>等待下載完成
<span style="font-family:SimSun;">yield return new WWWContinue()</span>
f>yield break不再執行後續語句
這裏只是對Unity協程進行了簡單的介紹和基本用法分析,其實網上已經有了一些對Unity協程更透徹的分析,例如http://dsqiu.iteye.com/blog/2029701?utm_source=tuicool