Unity中的协程用法以及注意事项

Posted Dean二十七

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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停止协程时,应当注意到,不是停止所有的协程,而是停止当前脚本下的所有协程。

以上是关于Unity中的协程用法以及注意事项的主要内容,如果未能解决你的问题,请参考以下文章

F# 中的协程

unity 中的协程

在foreach循环Unity3D C#中的协程

Unity优化如何实现Unity编辑器中的协程

unity里头的协程

unity如何停止不用字符串方式开启协程的方法