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

更新 發佈閱讀 5 分鐘

前言

  這篇文章將會講述 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
瓶裝雪的沙龍
117會員
247內容數
你好,我是瓶裝雪!我是一名遊戲設計師!
瓶裝雪的沙龍的其他內容
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/09/22
魔火術師是第三人稱動作射擊遊戲,屬於專題畢業製作,在畢業組成新的團隊後優化並上架。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2024/01/26
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
2023/12/29
講述遊戲設計從新手到專業的發展方向。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這篇文章將會快速介紹非同步函式(Async / Await)的簡易使用方式。
Thumbnail
這篇文章將會快速介紹非同步函式(Async / Await)的簡易使用方式。
Thumbnail
這篇文章將會講述這款遊戲的開發預計與遊戲內系統的清單粗估。
Thumbnail
這篇文章將會講述這款遊戲的開發預計與遊戲內系統的清單粗估。
Thumbnail
這篇文章將會講述 Unity 中協程(Coroutine)的基本介紹,分享一些關於協程的應用方向,最後並總結簡單撰寫協程的步驟。
Thumbnail
這篇文章將會講述 Unity 中協程(Coroutine)的基本介紹,分享一些關於協程的應用方向,最後並總結簡單撰寫協程的步驟。
Thumbnail
這篇文章將會分析時間,從時間的觀點再到時間的意義,最後介紹時間的各種操控,分享在遊戲設計中對時間的操作。
Thumbnail
這篇文章將會分析時間,從時間的觀點再到時間的意義,最後介紹時間的各種操控,分享在遊戲設計中對時間的操作。
Thumbnail
這篇文章將會講述時間系統,以及 time 和 deltaTime 兩個時間類型。
Thumbnail
這篇文章將會講述時間系統,以及 time 和 deltaTime 兩個時間類型。
Thumbnail
這篇文章我將會講述關於 Update 相關的函式,並介紹他們在遊戲設計中所代表的地位,當未來需要使用時可以回來參考這篇文章。
Thumbnail
這篇文章我將會講述關於 Update 相關的函式,並介紹他們在遊戲設計中所代表的地位,當未來需要使用時可以回來參考這篇文章。
Thumbnail
  這篇文章將介紹public函式應用,回顧保護層級、無類型兩個核心重點,再介紹遊戲製作重點程式(Script),再到控制中心Script製作與方針。
Thumbnail
  這篇文章將介紹public函式應用,回顧保護層級、無類型兩個核心重點,再介紹遊戲製作重點程式(Script),再到控制中心Script製作與方針。
Thumbnail
本文章將介紹Unity產品生命週期的一部分,並提供使用範例程式碼。
Thumbnail
本文章將介紹Unity產品生命週期的一部分,並提供使用範例程式碼。
Thumbnail
這篇文章會介紹一個靜態浮點數Time.deltaTime,並教導你製作計時器,以及計時器的相關知識與使用建議。
Thumbnail
這篇文章會介紹一個靜態浮點數Time.deltaTime,並教導你製作計時器,以及計時器的相關知識與使用建議。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News