Unity C# | 協程(Coroutine)的概念、使用及應用

更新於 2023/04/10閱讀時間約 4 分鐘

前言

  這篇文章將會講述 Unity 中協程(Coroutine)的基本介紹,分享一些關於協程的應用方向,最後並總結簡單撰寫協程的步驟。

1. 聽聞已久

  其實協程是我一直都通過的東西,因為它撰寫完的程式碼可以非常的龐大與複雜,所以我曾經以為這是一個非常複雜的官方函式,後來發現這似乎是跟 C# 有關,不過依然沒有去碰觸。

2. 時間相關

  Cotoutine 是一個跟時間有關的函式,後面會做更詳細的介紹,基本上就是更加簡單好用的計時器,我們可以自己撰寫一份倒數計時的工具,也能運用協程進行計時的方式去處理問題。

3. 實用函數

  在遊戲設計中,時間是一項非常重要的事情,隨之而來用時間安排程式步驟的協成就會成為相當實用的函數,我自己判斷協程的優點非常多,對於新手而言暫時還不用擔心濫用或浪費效能這件事情。

二、協程(Coroutine)的基本介紹

  介紹 Coroutine 的一些內容。

1. 用時間來進行程式的控管

  前面有提到,它是基於時間為主軸的函式,有開始協程 (StartCoroutine) 與中斷協程 (StopCoroutine) 的內容,並且有暫停 (yield return) 幾秒後執行下一段程式碼。

2. 把工作安排到未來的時間

  它的基本概念是把工作安排到未來進行處理,不需要每一幀都進行調用,直到需要的時候才會調用,並且能避免程式工作量太大後,會在不同幀執行的效能問題,會在精準的時刻同步工作。

3. IEnumerator (列舉器)

  其中最核心的就式叫做 IEnumerator 的列舉器,我當初也是看到這個就覺得這個函式及相關知識相當複雜,因為它的字數很多以外,還有 yield retrun 這種我看不懂的程式碼,其實就是帶有時間的程式碼容器。

三、協程(Coroutine)的應用方面

  那協程通常會用於遊戲中的那些部分呢?

1. 動畫控制

  如果設計師想要讓玩家在受到攻擊後,同步處理兩項程式,並且失去控制與獲得受傷的無敵幀,那就可以使用協程進行安排,程式設計師也能很好的安排無敵時間有幾秒,受傷特效什麼時候要播放。

2. 等待時間

 擁有等待時間的東西都很適合使用協程來進行安排,如果是固定時間可以使用調用(Invoke) 擷取延遲來讓敵人固定時間重生,如果是曲線或者不具備規律的生程時間,使用協程(Coroutine)是很適合的方式。

3. 流程控制

  如果在遊戲中會出現一系列相同流程的環節,使用協程(Coroutine)來進行遊戲設計是不錯的選擇,例如敵人 AI 的設計,就能使用協程控制巡邏,在發現敵人後中斷協程,改為追尋玩家等等。

四、簡單的程式碼步驟

  接下來簡單敘述程式碼的撰寫步驟,不涉及完整的程式碼。

1. 創建一個列舉器(IEnumerator)

  首先,我們創建一個新的私人函式,這個函式使用列舉器(IEnumerator)作為宣告,並命名為 waitToDoSomeThing (等待來做某些事情)。

2. 撰寫回傳值

  因為它是一個正常的函式,因此會需要回傳值,也就是協程一定要等待幾秒鐘以後進行下一步,不過這個等待可以是零秒,撰寫方式「yield return new」後面接想要的等待形式。
  常使用的函式是等待幾秒 (WaitForSecond)這個函式,也有其它的呼叫方式可以參考,不過詳細就要自己上網尋找了,可以使用的類似項目有非常多種。

3. 開始協程

  在想要開始協程的地方使用開始協程 (StartCoroutine)就可以啟動協程,協程執行完畢以後也不用主動輸入 StopCoroutine 來結束協程,它是自行穿插在每一幀的函式,並不是創建一個新的執行緒。

五、後記

  在學習 Coroutine 的時候,我原本以為我會需要查詢大量的資料,結果我跑去跟 GPT 對話,我很喜歡跟它問問題的感覺,有耐心又有風度,也不會怕回答類似的問題,並且能追根究柢去探尋 Coroutine 的知識。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
105會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會講述 Blockout 的介紹和適合的材質。
這篇文章將會講解 Git 專案上傳 GitHub 的流程。
這篇文章將會講述 Animator 中 Play 和 Transition 的差異和特色。
這篇文章將會講述關於相機的核心和常用知識。
這篇文章將會介紹 Unity 相機的不同空間座標。
這篇文章將會講述時間系統,以及 time 和 deltaTime 兩個時間類型。
這篇文章將會講述 Blockout 的介紹和適合的材質。
這篇文章將會講解 Git 專案上傳 GitHub 的流程。
這篇文章將會講述 Animator 中 Play 和 Transition 的差異和特色。
這篇文章將會講述關於相機的核心和常用知識。
這篇文章將會介紹 Unity 相機的不同空間座標。
這篇文章將會講述時間系統,以及 time 和 deltaTime 兩個時間類型。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。