unity篇(2):在Unity中協程的各種使用

2021-03-02 UpperGamer

  Unity的協程系統是基於C#的一個簡單而強大的接口 ,IEnumerator,它允許你為自己的集合類型編寫枚舉器。這樣說有點難懂其實unity中的協程其實就是為一個方法開闢多個入口。


我們來看看協程最基本的使用:

通過"yield return"把方法停住,直到下一次你想調用這個方法的時間再從剛剛停止的地方繼續進行,就像做了一個計時器,實現了每五秒一次輸出。

關於下一次入口的位置還可以這樣:

yield return null; // 下一幀再執行後續代碼

yield return 0; //下一幀再執行後續代碼

yield return 6;//(任意數字) 下一幀再執行後續代碼

yield break; //直接結束該協程的後續操作

yield return asyncOperation;//等異步操作結束後再執行後續代碼

yield return StartCoroution(/*某個協程*/);//等待某個協程執行完畢後再執行後續代碼 

yield return WWW();//等待WWW操作完成後再執行後續代碼

yield return new WaitForEndOfFrame();//等待幀結束,等待直到所有的攝像機和GUI被渲染完成後,在該幀顯示在屏幕之前執行

yield return new WaitForSeconds(0.3f);//等待0.3秒,一段指定的時間延遲之後繼續執行,在所有的Update函數完成調用的那一幀之後(這裡的時間會受到Time.timeScale的影響);

yield return new WaitForSecondsRealtime(0.3f);//等待0.3秒,一段指定的時間延遲之後繼續執行,在所有的Update函數完成調用的那一幀之後(這裡的時間不受到Time.timeScale的影響);

...

關於結束協程

 一般用這兩個方法  

StopCoroutine(string)

StopCoroutine(「協程方法名」)

只能停止以StartCoroutine(「協程方法名」)開啟的協程;

StopAllCoroutine()

停止本對象中開啟的所有協程;

一些關於協程的注意事項

在程序中調用StopCoroutine()方法只能終止以字符串形式啟動(開始)的協程;

多個協程可以同時運行,它們會根據各自的啟動順序來更新協程可以嵌套任意多層

如果你想讓多個腳本訪問一個協程,那麼你可以定義靜態的協程;

協程不是多線程,它們運行在同一線程中,跟普通的腳本一樣;如果你的程序需要進行大量的計算,那麼可以考慮在一個隨時間進行的協程中處理它們;

IEnumerator類型的方法不能帶ref或者out型的參數

相關焦點

  • Unity實戰之炸彈人
    在本教程中,你將學到:伸出你的手指,大喊一聲「fire in the hole」( cs 術語,即「注意隱蔽,我要扔手雷了」)。爆炸即將在 Unity 中發生。:]注意:這篇炸彈人教程假設你知道如何使用 Unity 編輯器以及用文本編輯器寫代碼。
  • 使用Unity感知工具大批量生成、分析合成數據,高效地訓練ML模型
    本文屬於合成數據系列第二篇,我們將用一個對象檢測的例子,來介紹Unity生成和分析合成數據集的各種工具。在系列首篇文章中(點擊回看),我們討論了搜集大量標籤圖像、訓練機器學習模型完成電腦視覺任務時遇到的各種挑戰。還討論了Google Cloud AI和OpenAI的最前沿研究,在物體檢測等類似任務中使用合成數據的可行性。
  • 如何運用Unity製作VR全景漫遊?
    /gvr-unity-sdk全景圖片一張:自行拍攝或者google查找 1、運行PTGui,選擇 Tools – Convert to QTVR/Cubic2、點擊 Add Files,添加全景文件3、選擇 cube faces,6 separate files (立方體表面,6個單獨文件),可以選擇 Cube Face Names
  • Unity人物隱身(半透明)處理
    unity官方mesh合併文檔當然只靠官方文檔並沒有什麼卵用,unity官方文檔的一貫風格,你們懂得~~我們還是要自己寫代碼,或者也可以使用像Mesh Baker這樣的現成工具實現,對於Mesh Baker的使用這裡就不累述了,有很詳細的文檔和例子。網格合併的同時還進行了材質合併,代碼在下一部分以前給出。
  • 漫步VR——Unity語音聊天室開發
    _5),將壓縮包中對應的unity版本的文件夾(如5.4,5.3)中的文件解壓到Unity安裝目錄的/Editor/Data/VR/Unity/下邊;2、打開Unity,Edit->ProjectSettings->players設置Virtual Reality Supported如下圖;3、OculusVR的runtime版本大於0.8;4、
  • Unity2018.3中文更新日誌詳解
    新的Hub v1.2版本包括通過Unity下載歸檔(https://unity3d.com/get-unity/download/archive) URL 直接在Hub中下載和安裝舊版Unity Editor版本的功能。依賴特定(較舊)版本的編輯器的用戶現在只需單擊一下即可輕鬆地從Hub訪問它們。
  • Unity Android Plugin開發指南
    >
  • 小技巧:在Ubuntu 14.04中重置Unity和Compiz設置
    在此貼士中,我們將看看怎樣來重置Ubuntu 14.04中的Unity和Compiz。事實上,全部要做的事,僅僅是運行幾個命令而已。重置Ubuntu 14.04中的Unity和Compiz打開終端(Ctrl+Alt+T),並使用以下命令來重置compiz:dconf reset -f /org/compiz/重置compiz後,重啟Unity:setsid unity此外,如果你想將Unity圖標也進行重置,試試以下的命令吧:
  • Unity URP/SRP 渲染管線淺入深出【匠】
    docs.unity3d.com/Packages/com.unity.render-pipelines.universal%408.2/manual/universalrp-builtin-feature-comparison.html
  • 實戰 用Unity快速開發太空飛機大戰(上)
    1、新建打飛機unity工程,建好資源分類目錄,導入飛機FBX模型文件以及貼圖,射擊和爆炸等聲音文件等等。如圖:2、新建場景game.unity,下面大部分工作都在這個場景裡完成!Ok,我們可以看到星空中的火星了。。。
  • 在Unity中實現點雲的效果
    介紹在unity中實現點雲的效果可以豐富我們的場景,並且可以與kinect等rgbd相機結合,增加互動。
  • 如何利用Unity快速搭建訓練機器人數字孿生?
    中,就在 Unity 引擎中構建了一個虛擬的物理環境,引擎中的模擬自行車有著真實的質量,他將自行車的「自行」的過程算法在虛擬環境中可視化了出來,模擬過程沒有問題後他才將仿真過程搬到現實。或許在不遠的未來,現實中的產品在投入使用之前,都會在虛擬空間裡先「演練」一番。
  • Unity插件之Unity調用C#編譯的DLL
    而我創建的MyLib項目的默認.NET Framework 3.5版本為4.5.2。選擇項目,然後右鍵選擇屬性 -> 應用程式,將目標框架改為 .NET Framework 3.5或以下 ,如下圖:
  • [TA]Unity Shader:半透明、渲染、透明度測試和混合...
    綠色代表材質1,黃色代表材質2,因此分為兩個DrawCall從cpu發送渲染命令(批處理技術為了優化渲染減少drawcall會將材質1的兩個物體分為一個Batch一起處理,暫時看成同一個物體即可);在每一次Drawcall中,也就是處理每一個物體映射到屏幕上的像素的過程中,物體經過幾何階段變換、光柵化、片元著色器後會得到一堆片元序列(屏幕輸出像素的候選者),片元可簡單理解成攜帶各種數據的像素
  • unity3d 筆記35-實例-掃雷-2
    實例 - 掃雷 - 2根據上一篇所寫的,我們已經可以初步做出一個掃雷遊戲了,雖然醜了點,稍稍也有些粗糙。
  • Unity Perception工具 | 使用合成數據訓練出強大的物體檢測ML模型
    本文屬於「使用Unity生成合成數據」系列第三篇。在第一篇中,我們討論了在為計算機視覺訓練機器學習模型時,搜集大量帶標籤圖像會面臨的幾種挑戰(點擊回看)。最近,我們又展示了如何使用Unity的認知訓練工具來生成來標籤數據的幀(點擊回看)。
  • [Unity項目實踐] 連連看遊戲教程——後宮大作戰
    實際上,《編程之美》一書中就有一章節是專門講連連看的。為了防止大家看的有點暈,這裡先對下文中頻繁出現的兩個名詞做一下說明:當前點指第一次選擇的點,目標點指第二次選擇的點。連連看原理了解一下在傳統的連連看遊戲中,玩家想要成功連線並消除。需要滿足2個條件才能夠進行消除並得分。
  • unity建造物體
    接上一回unity做一個簡單的運輸帶
  • Unity 3D | 美術向系列教程2_地形系統介紹
    前言剛發第二篇2019就過去了,提前祝大家元旦不加班吧今天水第一篇基礎,地形系統。地形系統大家了解了解就Ok,當個玩具玩一玩,比較正規項目不會去用他,太費了。不排除一種情況,即地編製作大地形時候使用,再將地形轉為Mesh減面。下一期將插入一節卡通Shader的製作。具體是還原塞爾達傳說荒野之息的傑克大魔王,還是神奇寶貝的妙蛙種子就隨緣吧。
  • unity中2d遊戲製作基礎訓練視頻教程
    unity中2d遊戲製作基礎訓練視頻教程本教程是關於Unity第三人稱射擊遊戲完整製作訓練視頻教程,時長:47分,大小:10.7