樱花草WWW日本在线观看,色婷婷精品大在线视频,久久婷婷五月综合色国产香蕉,老牛精品亚洲成AV人片

  • unity3d中協(xié)程Coroutine的的原理及使用

    2019/1/9??????點(diǎn)擊:

    我們學(xué)習下unity3d中協(xié)程Coroutine的的原理及使用

    1.什么是協(xié)調程序

    unity協(xié)程是一個(gè)能暫停執行,暫停后立即返回,直到中斷指令完成后繼續執行的函數。

    它類(lèi)似一個(gè)子線(xiàn)程單獨出來(lái)處理一些問(wèn)題,性能開(kāi)銷(xiāo)較小,但是他在一個(gè)MonoBehaviour提供的主線(xiàn)程里只能有一個(gè)處于運行狀態(tài)的協(xié)程。

    2.協(xié)同程序的特點(diǎn)

    1、協(xié)程在中斷指令(YieldInstruction)產(chǎn)生時(shí)暫停執行

    2、協(xié)程一暫停執行便立即返回 //中斷協(xié)程后返回主函數,暫停結束后繼續執行協(xié)程剩余的函數。

    3、中斷指令完成后從中斷指令的下一行繼續執行

    4、同一時(shí)刻、一個(gè)腳本實(shí)例中可以有多個(gè)暫停的協(xié)程,但只有一個(gè)運行著(zhù)的協(xié)程

    5、函數體全部執行完后,協(xié)程結束

    6、協(xié)程可以很好的控制跨越一定幀數后執行的行為

    7、協(xié)程在性能上、相比于一般函數幾乎沒(méi)有更多的開(kāi)銷(xiāo)

    3.創(chuàng )建一個(gè)協(xié)程函數

    注意:

    協(xié)同函數的返回值的類(lèi)型必須是Coroutine,Coroutine繼承與Yieldinstruction。

    所以協(xié)同程序的返回類(lèi)型就只能是null,等待的時(shí)間,等待的幀數。。由此可見(jiàn)WWW 也是實(shí)現了Coroutine的~

    4.開(kāi)始一個(gè)協(xié)同程序

    通過(guò)MonoBehaviour提供的StartCoroutine方法來(lái)實(shí)現啟動(dòng)協(xié)同程序。

    1、StartCoroutine(IEnumerator routine);

    優(yōu)點(diǎn):靈活,性能開(kāi)銷(xiāo)小。

    缺點(diǎn):無(wú)法單獨的停止這個(gè)協(xié)程,如果需要停止這個(gè)協(xié)程只能等待協(xié)同程序運行完畢或則使用StopAllCoroutine();方法。

    2、StartCoroutine (methodName:string, value : object = null);

    優(yōu)點(diǎn):可以直接通過(guò)傳入協(xié)同程序的方法名來(lái)停止這個(gè)協(xié)程:StopCoroutine(string methodName);

    缺點(diǎn):性能的開(kāi)銷(xiāo)較大,只能傳遞一個(gè)參數。

    5.停止協(xié)同程序

    1、StopCoroutine(string methodName);

    2、StopAllCoroutine();

    3、設置gameobject的active為false時(shí)可以終止協(xié)同程序,但是再次設置為true后協(xié)程不會(huì )再啟動(dòng)。

    6.協(xié)同程序的執行順序

    開(kāi)始協(xié)同程序 -> 執行協(xié)同程序 -> 中斷協(xié)同程序(中斷指令)-> 返回上層繼續執行

    ->中斷指令結束后繼續執行協(xié)同程序剩下的內容

    7.協(xié)同程序的注意事項

    1、不能再Update或者FixUpdate方法中使用協(xié)同程序,否則會(huì )報錯。

    2、關(guān)于中斷指令:

    中斷指令/YieldInstruction,一個(gè)協(xié)程收到中斷指令后暫停執行,返回上層執行同時(shí)等待這個(gè)指令達成后繼續執行。


      指令                      描述                          實(shí)現

    WaitForSeconds          等待指定秒數            yield return new WaitForSeconds(2);

    WaitForFixedUpdate      等待一個(gè)固定幀          yield return new WaitForFixedUpdate();

    WaitForEndOfFrame       等待幀結束              yield return new WaitForEndOfFrame();                         

    StartCoroutine          等待一個(gè)新協(xié)程暫停      yield return StartCoroutine(other coroutine);

    WWW                     等待一個(gè)加載完成        yield return www;

    注意:

    1、一個(gè)協(xié)程A里在中斷指令里再啟動(dòng)一個(gè)協(xié)程B,在yield return StartCoroutine時(shí)執行的順序是:

    ①:先執行新協(xié)程B;

    ②:新協(xié)程B暫停后向上返回協(xié)程A,A協(xié)程暫停,返回協(xié)程A的上層函數;

    ③:因為決定協(xié)程A是否結束的標志是新協(xié)程B是否結束,所以當新協(xié)程B結束后返回協(xié)程A繼續執行余下的內容;

    ④:協(xié)程A執行結束。

    2、關(guān)于WWW的中斷指令可參考API:

    You can inspect the isDone property to see if the download has completed or yield the download object to automatically wait until it is (without blocking the rest of the game).

    你可以檢查isDone屬性來(lái)查看是否已經(jīng)下載完成,或者yield自動(dòng)等待下載物體,

    直到它被下載完成(不會(huì )影響游戲的其余部分)。

    3、協(xié)同程序的中斷返回機制也可用于指定時(shí)間間隔執行一個(gè)程序:

    中文字幕人妻丝袜成熟乱九区| 国产精品无码AV片在线观看播放| 人妻插B视频一区二区三区| 女人被男人桶爽视频网站| 色欲蜜桃AV无码中文字幕| 国产成人精品综合久久久久|