国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里

這篇具有很好參考價值的文章主要介紹了【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里,# Unity精華一記,unity,游戲引擎


?????個人主頁:@元宇宙-秩沅

????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?!

????? 本文由 秩沅 原創(chuàng)

????? 收錄于專欄unity每日一記

????推薦文章?


?【軟件設(shè)計師高頻考點(diǎn)暴擊】

?【Unityc#專題篇】之c#系統(tǒng)化大禮包】

?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs

?【unity本站最全系列】unity常用API大全一篇文章足以
【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里,# Unity精華一記,unity,游戲引擎


??



【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里,# Unity精華一記,unity,游戲引擎


?? Unity協(xié)程


介紹和區(qū)別


Unity中的多線程

  • Unity支持多線程,但是操作相關(guān)對象還得在主線程中實(shí)現(xiàn),要注意關(guān)閉線程最后
  • 但是可以作為復(fù)雜算法或邏輯運(yùn)算計算的復(fù)線程,(線程是獨(dú)立運(yùn)行的管道)——專門用一個線程來做這些復(fù)雜的運(yùn)算

協(xié)程和多線程的區(qū)別

  • 1.協(xié)程不是多線程,并且在繼承 Mononabehavar類下使用
  • 2.多線程是和主線程區(qū)分開來的
  • 3.協(xié)程是在主線程中運(yùn)行的,只是分時分布將邏輯進(jìn)行處理

協(xié)程主要作用


協(xié)程主要作用


1.延時調(diào)用

 IEnumerator ChangeState()  //協(xié)程迭代器的定義
    {
        //暫停幾秒(協(xié)程掛起)
        yield return new WaitForSeconds(2);
        //暫停兩秒后再切入走路的動畫
        animator.Play("Walk");`    
   }

2.和其他邏輯一起協(xié)同執(zhí)行

,比如一些很耗時的工作,在這個協(xié)程中執(zhí)行異步操作,比如下載文件,加載文件,異步生成怪物等

*資源加載一般是一個比較耗時的操作,如果直接放在主線程中會導(dǎo)致游戲卡頓,通常會放到異步線程中去執(zhí)行。
【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里,# Unity精華一記,unity,游戲引擎

3.分布分時執(zhí)行復(fù)雜算法或繁雜邏輯

比如創(chuàng)建隨機(jī)創(chuàng)建一萬個球不卡幀

【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里,# Unity精華一記,unity,游戲引擎

 float time = 0;
    IEnumerator CreatCorutine( int number)
    {
        for (int i = 0; i < number; i++)
        {
                GameObject ball = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                ball.transform.position = new Vector3(Random.Range(0, 100), Random.Range(0, 100), Random.Range(0, 100));
            if(i % 1000 == 0)
            {
                yield return new WaitForSeconds(1);
            }      
        }                   
    }
    private void Update()
    {
        if(Input.GetKeyDown (KeyCode.Space))
        {
            StartCoroutine(CreatCorutine(10000));
        }    
    }

協(xié)程API相關(guān)


協(xié)程的聲明

  • 返回值為IEnumerator類型及其子類
  • 函數(shù)中通過 yield return 進(jìn)行返回
// MyCoroutine為自定義協(xié)程名
IEnumerator MyCoroutine(int i, string str)
    {
    //分時分布執(zhí)行。先打印i然后暫停1秒之后再打印3242
        print(i); 
        yield return new WaitForSeconds(1f);
        print("3242");     
        
    }
    


協(xié)程的開啟和停止

  • 開啟
    StartCoroutine(MyCoroutine(1, “123”));

  • 關(guān)閉所有協(xié)程
    StopAllCoroutines();

  • 關(guān)閉指定協(xié)程
    StopCoroutine(c1);

只有當(dāng)組件失活時協(xié)程不會失活,對象失活時協(xié)程也會失活

void start()
{
啟動方法一 String:
StartCoroutine("ChangeState"); //括號內(nèi)的是協(xié)程名
啟動方法二 函數(shù):
StartCoroutine(ChangeState());
啟動方法三 接口:                   //有參協(xié)程只能用該方法開啟
IEnumerator ie = ChangeState();
StartCoroutine(ie);

停止方法一 String:
StopCoroutine("ChangeState");
停止方法二 函數(shù):
StopCoroutine(ChangeState());
停止方法三 接口:  
StopCoroutine(ie);
停止方法四 協(xié)程:  
Coroutine c1 = StartCoroutine( ChangeState());
StopCoroutine(c1);
停止所有協(xié)程:
StopAllCoroutines();
}

-------------協(xié)程中的 yield------------
//1.下一幀執(zhí)行
        yield return 數(shù)字;
        yield return null;
        //在Update和LateUpdate之間執(zhí)行
        
//表示在本幀幀末執(zhí)行以下邏輯
       yield return new WaitForEndOfFrame();
 
//2.等待指定秒后執(zhí)行
        yield return new WaitForSeconds();
        //在Update和LateUpdate之間執(zhí)行

//3.等待下一個固定物理幀更新時執(zhí)行
        yield return new WaitForFixedUpdate();
        //在FixedUpdate和碰撞檢測相關(guān)函數(shù)之后執(zhí)行

//4.等待攝像機(jī)和GUI渲染完成后執(zhí)行
        yield return new WaitForEndOfFrame();
        //在LateUpdate之后的渲染相關(guān)處理完畢后之后,截圖功能放在這個后面執(zhí)行

 //5.一些特殊類型的對象 異步加載相關(guān)函數(shù)返回的對象    
        //一般在Update和LateUpdate之間執(zhí)行

//6.跳出協(xié)程
        yield break;


???????4.協(xié)程中的協(xié)程和有參協(xié)程


    StartCoroutine("CreateBoss");  //啟動協(xié)程
    
  //協(xié)程1 功能實(shí)時實(shí)例化游戲物體 
 IEnumerator CreateBoss()   
    {
        StartCoroutine(SetCreateCount(5));
        while (true) //功能實(shí)時實(shí)例化游戲物體
        {
            if (BossNum>=BossCount)
            {
             yield break; //在協(xié)程中break前面要加 yield
            }
            Instantiate(animator.gameObject);
            BossNum++;
            yield return new WaitForSeconds(2);
        }
    }
    
 //協(xié)程2 功能實(shí)時實(shí)例化游戲物體  
 IEnumerator SetCreateCount(int num) 
    {
        BossCount =num;
        yield return null; //暫停一幀
---------------------
此時如果這里只是暫停一幀的話,
那么上面調(diào)該有參協(xié)程的協(xié)程體中,
后面的語句并未生效,因?yàn)闀和R粠螅?后面的方法已經(jīng)執(zhí)行了,
所以此時的BossCount并不等于有參傳遞的5
(當(dāng)然BossCount是全局變量)
---------------------
    }
    
---

協(xié)程的本質(zhì)


協(xié)程的本質(zhì)

  • 1.本體為迭代器
  • 2.協(xié)程調(diào)度器(可自己實(shí)現(xiàn))
//Ieunmrator接口中的兩個成員:MoveNext_移動下一個  Current——當(dāng)前返回值
 while(ie.MoveNext())
        {
            print(ie.Current);
        }

????系統(tǒng)路線學(xué)習(xí)點(diǎn)擊跳轉(zhuǎn)?


?【Unityc#專題篇】之c#進(jìn)階篇】

?【Unityc#專題篇】之c#核心篇】

?【Unityc#專題篇】之c#基礎(chǔ)篇】

?【Unity-c#專題篇】之c#入門篇】

?【Unityc#專題篇】—進(jìn)階章題單實(shí)踐練習(xí)

?【Unityc#專題篇】—基礎(chǔ)章題單實(shí)踐練習(xí)

?【Unityc#專題篇】—核心章題單實(shí)踐練習(xí)


你們的點(diǎn)贊?? 收藏? 留言?? 關(guān)注?是我持續(xù)創(chuàng)作,輸出優(yōu)質(zhì)內(nèi)容的最大動力!、


【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里,# Unity精華一記,unity,游戲引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-751499.html


到了這里,關(guān)于【Unity每日一記】“調(diào)皮的協(xié)程”,協(xié)程和多線程的區(qū)別在哪里的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity 的協(xié)程的原理

    Unity是一款非常強(qiáng)大的游戲引擎,它支持多種編程語言,其中最常用的語言是C#。在Unity中,協(xié)程是一種非常強(qiáng)大的功能,它可以讓我們在游戲中實(shí)現(xiàn)各種各樣的效果。本文將詳細(xì)介紹Unity協(xié)程的原理,并給出示例代碼詳解。 對啦!這里有個游戲開發(fā)交流小組里面聚集了一幫熱

    2024年02月02日
    瀏覽(36)
  • unity 等待事件之協(xié)程和Invoke

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 協(xié)程的用法 和 Invoke 的等待事件使用 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 代碼如下(示例): 好記性不如爛筆頭!

    2024年04月13日
    瀏覽(28)
  • unity協(xié)程 Start/StopCoroutine() 結(jié)束協(xié)程和再次啟動協(xié)程存在的問題和解決方案

    unity協(xié)程 Start/StopCoroutine() 結(jié)束協(xié)程和再次啟動協(xié)程存在的問題和解決方案

    僅用于記錄遇到的問題和解決方案。 快速閱覽: 一、結(jié)束協(xié)程無效: 協(xié)程方法需要單獨(dú)存一份private IEnumerator myTest,再開始和結(jié)束不直接傳入方法名,而是使用這份保存的myTest進(jìn)行開始和結(jié)束。 二、再次開啟協(xié)程時少跑了幾行代碼: 再次開始同一個方法名的協(xié)程時,不是從

    2024年02月15日
    瀏覽(25)
  • [Unity] 基于迭代器的協(xié)程底層原理詳解

    Unity 是單線程設(shè)計的游戲引擎, 所有對于 Unity 的調(diào)用都應(yīng)該在主線程執(zhí)行. 倘若我們要實(shí)現(xiàn)另外再執(zhí)行一個任務(wù), 該怎么做呢? 答案就是協(xié)程. 協(xié)程本質(zhì)上是基于 C# yield 迭代器的, 使用 yield 語法生成的返回迭代器的方法, 其內(nèi)部的邏輯執(zhí)行, 是 “懶” 的, 只有在調(diào)用 MoveNext 的時

    2024年01月16日
    瀏覽(18)
  • 【unity每日一記】unity中常見的特性大全

    【unity每日一記】unity中常見的特性大全

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【unity本站最全系列】unity常用API大全

    2024年02月11日
    瀏覽(52)
  • 【unity每日一記】transform類精華之珠

    【unity每日一記】transform類精華之珠

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【unity本站最全系列】unity常用API大全

    2024年02月11日
    瀏覽(21)
  • 【unity每日一記】資源和場景加載圖文詳解

    【unity每日一記】資源和場景加載圖文詳解

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【unity本站最全系列】unity常用API大全

    2024年02月10日
    瀏覽(19)
  • 【Unity每日一記】SceneManager場景資源動態(tài)加載

    【Unity每日一記】SceneManager場景資源動態(tài)加載

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【軟件設(shè)計師高頻考點(diǎn)暴擊】 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【u

    2024年02月12日
    瀏覽(26)
  • 【Unity每日一記】資源加載相關(guān)你掌握多少?

    【Unity每日一記】資源加載相關(guān)你掌握多少?

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【軟件設(shè)計師高頻考點(diǎn)暴擊】 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【u

    2024年02月12日
    瀏覽(43)
  • 【Unity每日一記】資源加載相關(guān)和檢測相關(guān)

    【Unity每日一記】資源加載相關(guān)和檢測相關(guān)

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity每日一記 ?【軟件設(shè)計師高頻考點(diǎn)暴擊】 ?【Unityc#專題篇】之c#系統(tǒng)化大禮包】 ?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs ?【u

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包