StopAllCoroutines只会停止调用这个接口的脚本实例对象上的所有协程,而非调用这个接口脚本的所有实例对象。

协程被打断

使用Unity的MonoBehavior组件开启一段协同程序非常方便,但是应该注意如果这段程序需要运行一段较长时间,在运行期间,如果开启这段协同程序的组件被删除或SetActive(false) 隐藏了,则协程会被打断,这段程序就不在执行了,因此使用StartCoroutine要注意源组件的生命周期和协程的生命周期。

这种情况(或者有些类不继承自MonoBehaviour),若想要在这些类中使用StartCoroutine,则可以

//空 Mono 类
public class MonoStub : MonoBehaviour
{ }new GameObject().AddComponent<MonoStub>().StartCoroutine("Test1");

不这样的话,在Unity5.6中会报错。

上面是Unity5.6.3P4上测试过,之前在Unity5.2.5上可以使用:
new GameObject().AddComponent<MonoBehaviour>().StartCoroutine("Test1");

例:一个协程在 yield return 后 运行过程中会因为父节点的暂时隐藏而打断协程,就可以单独挂一个独立的空组件来保证协程运行过程不会被中断

    // 创建一个继承 MonoBehaviour 的空类private class MonoStub:MonoBehaviour {}private GameObject monoStub;private IEnumerator routineLoadItems;// 注意GCprivate void OnDestroy(){StopCoroutine(routineLoadItems);Destroy(monoStub);}public void SetData(List value){this.transform.RemoveChildren();if (this.gameObject.activeSelf){//StartCoroutine(LoadItemList(value));monoStub = new GameObject();routineLoadItems = LoadItemList(value);monoStub.AddComponent<MonoStub>().StartCoroutine(routineLoadItems);}}
//程序在下一帧中从当前位置继续执行
yield return 0;//程序在下一帧中从当前位置继续执行
yield return null;//程序等待N秒后从当前位置继续执行
yield return new WaitForSeconds(N);//在所有的渲染以及GUI程序执行完成后从当前位置继续执行
yield new WaitForEndOfFrame();//所有脚本中的FixedUpdate()函数都被执行后从当前位置继续执行
yield new WaitForFixedUpdate();//等待一个网络请求完成后从当前位置继续执行
yield return WWW;//等待一个xxx的协程执行完成后从当前位置继续执行
yield return StartCoroutine(xxx);//如果使用yield break语句,将会导致协程的执行条件不被满足,不会从当前的位置继续执行程序,而是直接从当前位置跳出函数体,回到函数的根部
yield break;

 

协程开启与停止的对应方法:

注意点:

1、StopCoroutine(方法名字符串or方法名引用);
注意:如果启动(StartCoroutine)用的是方法名引用,结束(StopCoroutine)也必须用方法名引用,否则结束不了。
2、StopAllCoroutine(),只能结束它所在脚本的所有协程,对其它脚本里的协程不起作用。
3、IEnumerator类型的函数,不能带ref或out类型参数。

using UnityEngine;
using System.Collections;public class Test : MonoBehaviour
{//声明一个协程public IEnumerator Count(int i){while (true){i++;Debug.Log(i);yield return null;}}//开启协程的方式1void Start1(){StartCoroutine("Count", 0);}//停止协程的方式1void Stop1(){StopCoroutine("Count");}//开启协程的方式2IEnumerator routine;void Start2(){routine = Count(0);StartCoroutine(routine);}//停止协程的方式2void Stop2(){StopCoroutine(coroutine);}//开启协程的方式3Coroutine coroutine;void Start3(){coroutine = StartCoroutine(Count(0));}//停止协程的方式3void Stop3(){StopCoroutine(coroutine);}void Start(){Start3();}void Update(){if (Input.GetKeyDown("space")){Stop3();}}}

Unity协程StartCoroutine/StopCoroutine_Unity李大馋师的博客-CSDN博客

Unity 协程开启、停止与生命周期相关推荐

  1. 《学Unity的猫》——第九章:状态机与Unity协程,好奇猫与铁皮怪水管

    文章目录 9.1 会吐水的铁皮怪 9.2 状态机是什么 9.3 使用协程实现状态机 9.4 进程与线程 9.4.1 什么是进程 9.4.2 什么是线程 9.5 Unity的协程 9.5.1 Unity ...

  2. unity 协程特点

    协程 一. Unity中使用协程 1. 什么是协程 2. 如何使用 3. 协程的应用场景 创建补间动画 打字机效果 异步加载资源 4. 注意事项 二. Unity协程的底层原理 1. 协程本体:C#的 ...

  3. 【Unity】Unity协程(Coroutine)的原理与应用

    文章目录 前言 一.什么是协程 二.应用场景 1.异步加载资源 2.将一个复杂程序分帧执行 3.定时器 三.协程的使用 注意事项 四.Unity协程的底层原理 1. 协程本体:C#的迭代器函数 2. ...

  4. unity如何解决协程开启频繁导致的程序卡顿

    unity如何解决协程开启频繁导致的程序卡顿 一.协程 协程并不会在Unity中开辟新的线程来执行,其执行仍然发生在主线程中.当我们有较为耗时的操作时,可以将该操作分散到几帧或者几秒内完成,而不用在一 ...

  5. Unity协程深入及实现

    Unity协程深入 文章目录 Unity协程深入 Unity协程简介 Unity协程的用法 协程的原理 协程的缺陷 自己实现协程 参考 Unity协程简介 Unity中的协程能够允许我们将一个任务分散 ...

  6. Unity 协程探究

    一.官方手册中的描述 1.Manual/Coroutines 函数在调用时, "从调用到返回" 都发生在一帧之内,想要处理 "随时间推移进行的事务", 相比Up ...

  7. Unity协程简述(简单用法,简易分析)

    Unity协程 协程的简单用法 简述 函数 协程的执行顺序 协程替我们做了什么 Yleid Return 如何进行跳帧,延迟,等待的操作 从IL的角度分析 IL语言 总结 自定义一个迭代器 优化 最后 ...

  8. Unity 协程(Coroutine)原理与用法详解

    前言: 协程在Unity中是一个很重要的概念,我们知道,在使用Unity进行游戏开发时,一般(注意是一般)不考虑多线程,那么如何处理一些在主任务之外的需求呢,Unity给我们提供了协程这种方式 为啥在 ...

  9. Unity协程实现分析以及Lua协程与Unity协程的混合使用

    1,节选翻译一篇stackoverflow关于Unity协程实现的讨论 - The big clues are in the C# version. Firstly, note that the re ...

最新文章

  1. 一年融4轮,虎赞科技完成红杉领投3000万美元B轮融资
  2. python中处理日期和时间的标准模块是-Python时间相关处理
  3. dbscan算法_DBSCAN聚类算法探索
  4. ArcGIS怎样获取重分类后各类所占的像元个数
  5. PHP之MVC项目实战(二)
  6. oracle数据库报错1033,Oracle联机日志出现错误ORA-16038 ORA-19809 ORA-00312 解决
  7. unity调用php,unity访问php
  8. 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员……
  9. 使用Sqlite数据库存储数据
  10. 使Window注册表更改立刻生效的命令行命令
  11. logback 简介
  12. 数据清洗案例 OpenRefine入门
  13. 【转下载】黑莓7290中文说明书
  14. CSDN博客去广告-谷歌插件
  15. springboot项目配置视图解析器无效的问题
  16. Android6.0风格图标,jQuery仿Android样式扁平风格图标插件
  17. Server_虚拟机闲谈;
  18. STM32配置DAC输出固定电压和方波
  19. 一个软硬件牛人的学习经历---给同是换行的人以共勉
  20. OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]

热门文章

  1. linux监测本机udp发动情况,Linux 下 TCP/UDP 端口测试及验证方法说明
  2. java作业练习4:KFC前台订餐系统(版本1)
  3. c语言调用graphviz_graphviz使用
  4. vue如何sleep_H5如何保持屏幕常亮—nosleep.js
  5. 锐捷网络与科大讯飞战略签约 强强联手助力智慧教育
  6. pyspider爬虫学习-教程2-AJAX-and-more-HTTP.md
  7. Android翻页入门
  8. asp.net983-宠物领养系统的设计与实现#毕业设计
  9. 【视频】视频播放(包含视频录制)的测试点总结
  10. Java基本类型和包装类型总结