Unity使用协程实现打字效果
之前的实现方法是借助Update()来更新UI,大部分的逻辑写在了Update中,今天看到协程的方法,觉得也可以同样实现Update的作用。
- 开启协程:StartCoroutine(协程方法);
- 关闭协程: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】
开启协程有两种方式:
- StartCoroutine(string FuncName);这种情况最多传递一个参数!!!不建议使用,会消耗较多性能;
- StartCoroutine(IEnumerator routine);
关闭协程有三种:
- StopCoroutine(string FuncName);
- StopCoroutine(Coroutine coroutine);这种情况用于以下情况
Coroutine coroutine = null; coroutine = StartCoroutine(changeProgress(progress, pro_time, 0.1f)); StopCoroutine(coroutine);
- StopAllCoroutines();
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭