你是不是遇到过协程停不了的情况?你是直接调用IEnumerator方法,如下?

void Start () {
StartCoroutine(IETest01());
StartCoroutine(IETest02());
} IEnumerator IETest01()
{
Debug.LogError("IETest01");
yield return new WaitForSeconds();
StopCoroutine(IETest02());
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}

不是协程停不了,是处理的方式不对。上面代码StopCoroutine(IETest02());相当于再调用了一次IETest02方法,和第一次调用StartCoroutine(IETest02());时返回的并不是同一个值。这里很好理解,普通的方法,多次调用,返回的值也不会指向同一段地址。

那么正确的方法应该怎么做呢?下面有三种参考方法:

1、通过函数名字符串

void Start () {
StartCoroutine("IETest01");
StartCoroutine("IETest02");
} IEnumerator IETest01()
{
Debug.LogError("IETest01");
yield return new WaitForSeconds();
StopCoroutine("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}

2、把返回值(IEnumerator )保存下来

IEnumerator ie1;
IEnumerator ie2;
void Start () {
ie1 = IETest01();
ie2 = IETest02();
StartCoroutine(ie1);
StartCoroutine(ie2);
} IEnumerator IETest01()
{
Debug.LogError("IETest01");
yield return new WaitForSeconds();
StopCoroutine(ie2);
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}

后面两段代码执行不会打印"IETest02 end",协程中断成功

3、把StartCoroutine方法的返回值(Coroutine)保存起来

Coroutine c1, c2;

    void Start()
{
c1 = StartCoroutine(IETest01());
c2 = StartCoroutine(IETest02());
} IEnumerator IETest01(int v)
{
Debug.LogError("IETest01:" + v);
yield return new WaitForSeconds();
StopCoroutine(c1);
yield return new WaitForSeconds();
Debug.LogError("IETest01 end");
}
IEnumerator IETest02()
{
Debug.LogError("IETest02");
yield return new WaitForSeconds();
Debug.LogError("IETest02 end");
}

最新文章

  1. Vue.js 整理笔记
  2. 打造AngularJs2.0开发环境
  3. Java计算上下基线
  4. Quagga服务器安装和配置
  5. SharpGL学习笔记(十七) 立体文字和平面文字
  6. C++11笔记
  7. 【转】Xcode7真机调试iOS应用程序
  8. BZOJ 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛( set )
  9. OPatch cannot find a valid oraInst.loc file to locate Central Inventory
  10. 20165304实验一java开发环境熟悉
  11. [Asp.net core]封装Layer ui checkbox 为taghelper
  12. jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行
  13. 复杂sql语句:按部门统计人数
  14. anu - component
  15. 利用saltstack一键部署多台zookeeper
  16. MongoDB ShardingCluster
  17. tyvj 1031 热浪 最短路
  18. 【RF库Collections测试】Convert To List
  19. Spring 跨域请求
  20. Storm集群部署及单词技术

热门文章

  1. JS校验身份证号的合法性
  2. python之类与类之间的关系
  3. 我的Java之旅 第八课 Servlet 进阶API、过滤器与监听器
  4. linux networking
  5. python3 邮件发送
  6. Linux 小知识翻译 - 「协议(protocol)」
  7. ABAP性能和优化
  8. 【Java学习系列】第4课--Java Web相关
  9. Windows安装pip方法
  10. springmvc 自定义拦截器实现未登录用户的拦截