前沿:這章節,將簡單的總結一下如何開啟協程,關閉協程,以及使用協程的注意事項。
一、如何開啟協程:
private void Start() { m_SpherePrefab = Resources.Load<GameObject>("Test/Sphere_00"); Debug.Log("m_SpherePrefab = " + m_SpherePrefab); #region 協程的學習及使用 StartCoroutine(Test_00()); StartCoroutine("Test_01"); StartCoroutine(Test_02(5, 9)); #endregion } private IEnumerator Test_00() { Debug.Log("協程 Test_00 准備執行"); yield return new WaitForSeconds(3.0f); Debug.Log("協程 Test_00 執行完畢"); } private IEnumerator Test_01() { Debug.Log("協程 Test_01 准備執行"); yield return new WaitForSeconds(5.0f); Debug.Log("協程 Test_01 執行完畢"); } private IEnumerator Test_02(int a, int b) { Debug.Log("協程 Test_02 准備執行"); yield return new WaitForSeconds(8.0f); Debug.Log("協程 Test_02:" + a + " " + b); Debug.Log("協程 Test_02 執行完畢"); }
這里,例舉了開啟協程的3種方法,以及協程傳遞數據的使用方法。
二、如何停止協程
private void Update() { if (m_CurrentCount < m_MaxCount) { if (Time.time > m_NextCloneTime) { //克隆 Clone(); } } if (Input.GetKeyUp(KeyCode.T)) { //通過 StopCoroutine 停止協程的時候,需要用方法名來停止,那么在開啟協程的時候,也需要使用方法名來開啟 //錯誤的停止方式 //StopCoroutine(Test_00()); } if (Input.GetKeyUp(KeyCode.Y)) { //通過 StopCoroutine 停止協程的時候,需要用方法名來停止,那么在開啟協程的時候,也需要使用方法名來開啟 //正確的停止方式 StopCoroutine("Test_01"); } if (Input.GetKeyUp(KeyCode.U)) { StopAllCoroutines(); } }
這里,指示了停止協程的方法。
三、注意事項
1.若是停止某個指定的協程(StopCoroutine),則填寫的參數應該是方法名,並且開啟這個協程的時候,填寫的參數應當也是方法名。
2.在使用使用StopAllCoroutines停止協程時,應當注意到,不是停止所有的協程,而是停止當前腳本下的所有協程。