各位好,今天來寫點對於遊戲常用的技術
本篇要使用 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 後
=====================================================================
流程有點複雜,不太好講,我盡可能實驗程式來講明白,有錯請糾正
以上技巧適合使用在劇情事件發生的時,控制秒數執行角色動作
當然應該是有其他用途,能的話留言舉例下吧