Unity中的協程用法以及注意事項


  前沿:這章節,將簡單的總結一下如何開啟協程,關閉協程,以及使用協程的注意事項。

 

  一、如何開啟協程:

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停止協程時,應當注意到,不是停止所有的協程,而是停止當前腳本下的所有協程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM