切換
舊版
前往
大廳
主題

Unity3D製作計數器「StartCoroutine應用」

冰劍士-冰雪飛 | 2014-11-08 17:08:00 | 巴幣 1052 | 人氣 33864

各位好,今天來寫點對於遊戲常用的技術

本篇要使用 StartCoroutine 來製作我們遊戲常看到的計數器
=====================================================================
當我們想要撰寫一個角色執行某的動作持續幾秒時

雖然可以使用以下的寫法,在 if 區段內撰寫你幾秒內要執行的動作

不過相信我,你絕對不會想這樣寫的,雖然程式碼的邏輯本身沒錯
但這樣會讓程式變得又臭又長,而且也難以整理維護
所以我們必須使用更有效率的方法來寫作,這時候 StartCoroutine 就派得上用場
=====================================================================
StartCoroutine

使用 StartCoroutine 之前我們要做個事前準備 IEnumerator 介面

IEnumerator 宣告名稱()
{
程式碼
yield return 0;
}
程式碼可以像範例那樣寫迴圈計時,當然不想這樣寫也可以

兩種使用 StartCoroutine 執行 IEnumerator 介面
StartCoroutine("宣告名稱",參數1,參數2,.......);
StartCoroutine(宣告名稱(參數1,參數2,.....));
IEnumerator 介面內沒參數,後面參數可以不用填
當然,參數也可以使用陣列來設定,請參考Boxing/Unboxing

=====================================================================
再來我們看 StartCoroutine 的運作流程,我們使用上圖的範例來解釋流程

當程式碼碰到 StartCoroutine 會去執行 IEnumerator 介面內的程式
程式執行到 yield return 0; 時會先跳離介面同步執行 StartCoroutine 之後的程式
然後再回去繼續執行 IEnumerator 介面
直到迴圈結束沒遇到 yield return 0; 結束 StartCoroutine

當然 IEnumerator 介面執行時也可以再塞 StartCoroutine 來執行其他 IEnumerator 介面

基本運行基本上跟 ThreadStart 委派很像(或者就是 ThreadStart 委派)

當然有啟動就有暫停
StopCoroutine
StopAllCoroutines

而Unity3D內建的一個計數器 WaitForSeconds(等待秒數)
要注意的是 WaitForSeconds 一定要寫在 IEnumerator 介面內,且在 yield return 後
=====================================================================
流程有點複雜,不太好講,我盡可能實驗程式來講明白,有錯請糾正

以上技巧適合使用在劇情事件發生的時,控制秒數執行角色動作

當然應該是有其他用途,能的話留言舉例下吧

創作回應

⚔不止星爆還很快呢⚔
最近要用到這功能 請問 用for()
而不用if(i<5)i+=time.deltaTim
是特別的用法 還是都可以
2016-07-02 03:30:02
冰劍士-冰雪飛
能說明的再詳細點嗎?
2016-07-02 11:05:24
⚔不止星爆還很快呢⚔
for(float i=0;i<5;i+=time.deltaTime){

yield return 0;
}
改成
float i=0
if(i<5)
yield return 0;
i+=time.deltaTim
還有
yield return 0<--這0有代表甚麼意思嗎?

2016-07-02 11:10:47
冰劍士-冰雪飛
我這段是有跑迴圈,你這邊也有要跑迴圈?
yield return 0 好像是一個中斷點,這樣寫似乎會回傳0(不是很確定)
也可以寫成yield return Null
2016-07-02 11:38:51
⚔不止星爆還很快呢⚔
我自己多試了幾次
知道 該怎寫了
感謝你的回覆
2016-07-02 11:49:06
暗黑炒蛋
原來StartCoroutine是用來調用IEnumerator的函式呀!
謝謝大大分享好文~
2019-08-19 14:23:15
TikaEvo
2019-12-12 16:28:25

更多創作