[Unity-22] Coroutine協程淺析

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章