之前的实现方法是借助Update()来更新UI,大部分的逻辑写在了Update中,今天看到协程的方法,觉得也可以同样实现Update的作用。

  1. 开启协程:StartCoroutine(协程方法);
  2. 关闭协程:StopCoroutine("协程方法");[错误,在这里使用无法停止协程]

具体实现:

   StartCoroutine(effectPrint(cTest,txtContent, 0.2f));

    /// <summary>
    /// 打字效果
    /// </summary>
    /// <param name="cTest"></param>
    /// <param name="txt"></param>
    /// <param name="time"></param>
    /// <returns></returns>
    IEnumerator effectPrint(char [] cTest,GTextField txt,float time)
    {
       int indexCount = 0;
       while (cTest!=null && indexCount < cTest.Length)
        {
            txt.text += cTest[indexCount];
            indexCount++;
            yield return new WaitForSeconds(time);
        }
        StopCoroutine("effectPrint");//错误用法,这种方式在这里停止不了协程
        Debug.Log("over");
    }

这里有个问题:当多次快速开启相同的协程时,打印出来的字符串就是错误的。这个问题待解决。

【2017.09.18】之前是在点击按钮的方法内先停止协程,然后经过判断再重新启用它,这样的结果就是之前的协程并没有被停止。解决方法是,使用StopAllCoroutines()方法来终止所有的协程。

【2017.10.07】

开启协程有两种方式:

  1. StartCoroutine(string FuncName);这种情况最多传递一个参数!!!不建议使用,会消耗较多性能;
  2. StartCoroutine(IEnumerator routine);

关闭协程有三种:

  1. StopCoroutine(string FuncName);
  2. StopCoroutine(Coroutine coroutine);这种情况用于以下情况
    Coroutine coroutine = null;
    coroutine = StartCoroutine(changeProgress(progress, pro_time, 0.1f));
    StopCoroutine(coroutine);
  3. StopAllCoroutines();