美景之屋5在线观看_成人区精品一区二区婷婷_91av在线视频播放_午夜影院在线_一本久久综合亚洲鲁鲁五月天_国产精品一区在线观看

  • 您的位置:首頁 > 新聞動態(tài) > Unity3D

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

    2019/1/9??????點擊:

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

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

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

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

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

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

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

    3、中斷指令完成后從中斷指令的下一行繼續(xù)執(zhí)行

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

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

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

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

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

    注意:

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

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

    4.開始一個協(xié)同程序

    通過MonoBehaviour提供的StartCoroutine方法來實現(xiàn)啟動協(xié)同程序。

    1、StartCoroutine(IEnumerator routine);

    優(yōu)點:靈活,性能開銷小。

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

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

    優(yōu)點:可以直接通過傳入?yún)f(xié)同程序的方法名來停止這個協(xié)程:StopCoroutine(string methodName);

    缺點:性能的開銷較大,只能傳遞一個參數(shù)。

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

    1、StopCoroutine(string methodName);

    2、StopAllCoroutine();

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

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

    開始協(xié)同程序 -> 執(zhí)行協(xié)同程序 -> 中斷協(xié)同程序(中斷指令)-> 返回上層繼續(xù)執(zhí)行

    ->中斷指令結(jié)束后繼續(xù)執(zhí)行協(xié)同程序剩下的內(nèi)容

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

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

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

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


      指令                      描述                          實現(xiàn)

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

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

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

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

    WWW                     等待一個加載完成        yield return www;

    注意:

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

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

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

    ③:因為決定協(xié)程A是否結(jié)束的標(biāo)志是新協(xié)程B是否結(jié)束,所以當(dāng)新協(xié)程B結(jié)束后返回協(xié)程A繼續(xù)執(zhí)行余下的內(nèi)容;

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

    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屬性來查看是否已經(jīng)下載完成,或者yield自動等待下載物體,

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

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

    主站蜘蛛池模板: 色中色成人导航 | 色综合色欲色综合色综合色综合r | 少妇高潮喷水久久久影院 | 久久精品人妻无码一区二区三区 | 制服丝袜人妻有码无码中文字幕 | 美女久久一区 | 欧美亚洲国语精品一区二区 | 亚洲国产精品va在线播放 | 国产亚洲精品麻豆一区二区 | 三级黄色录像视频 | 中文字幕影院 | 久热这里只有精品视频6 | 中国少妇videosex性高清 | 亚洲iv一区二区三区 | 中文字幕乱码在线播放 | 少妇被粗大的猛烈进出图片 | 91精品国产色综合久久不卡98最新章节 | 欧美日韩国产一区二区三区 | 午夜精品一区二区三区在线视频 | 台湾成人娱乐网 | 嫩草在线观看 | 色偷偷成人网免费视频男人的天堂 | 欧美精品免费一区二区三区 | 华人黄网站 | 黄色免费在线观看 | 久久精品久久精品中文字幕 | 日韩欧美福利视频 | 久久夜色精品国产网站 | 国产二区视频在线观看 | 久草小视频 | 亚洲精品中字 | 第一区免费在线观看 | 91麻豆果冻传媒天美蜜桃 | 亚洲一级久久 | 曰韩内射六十七十老熟女影视 | 国产黄网在线 | video日本老熟妇 | 国产成人A∨麻豆精品 | 久久人爱 | 2023天天射天天干 | 国产SUV精品一区二区883 |