unity,下面两个协程不等价

//代码1

IEnumerator A(){

  Debug.Log(“hi1”);

  {
    yield return new WaitForSeconds(1f);
    Debug.Log(“hi2”);
  }

  Debug.Log(“hi3”);

}

//代码2

IEnumerator A(){

  Debug.Log(“hi1”);

  yield return StartCoroutine (B());

  Debug.Log(“hi3”);

}

IEnumerator B(){
  yield return new WaitForSeconds(1f);
  Debug.Log(“hi2”);

}

代码1和代码2的打印顺序相同,都是hi1 hi2 hi3

但两者并不等价,体现在:

如果我调用StopCoroutine("A"),代码1会全部中止;而代码2只有A被停掉,B不会被停掉。

时间: 2024-11-08 20:49:59

unity,下面两个协程不等价的相关文章

【Unity】理解协程的原理1——实现一个自己的WaitForSeconds

协程的所能达到的效果就是在指定的时间点上执行需要执行的代码,Unity中开始一个协程的函数是StartCoroutine,而提供的延迟的类有以下几种分别是 new WaitForEndOfFrame; //等待一帧 new WaitForFixedUpdate; //等待一个FixedUpdate(固定时间间隔) new WaitForSeconds; //等待X秒 new WWW; //等待外部资源加载完毕 本文就针对其中的WaitForSeconds实现进行探究. 因为在开发过程中,很多时候

Unity中的协程(一)

这篇文章很不错的问题,推荐阅读英文原版: Introduction to Coroutines Scripting with Coroutines   这篇文章转自:http://blog.csdn.net/huang9012/article/details/38492937 协程介绍 在Unity中,协程(Coroutines)的形式是我最喜欢的功能之一,几乎在所有的项目中,我都会使用它来控制运动,序列,以及对象的行为.在这个教程中,我将会说明协程是如何工作的,并且会附上一些例子来介绍它的用法

Unity自己实现协程

自己实现协程有几个好处: 脱离Unity独立,拿到别的地方也可以用. 非主线程也可以启动协程,然后在主线程执行,比如异步网络消息等. 可以给每个协程一个id,通过id随时启动或关闭某个特定的协程,或者非MonoBehavior对象也可以管理属于自己的协程. Unity中,Coroutine是在LateUpdate执行的,每一个update都会执行一部分代码,拿IEnumerator来说,就是每一次都会MoveNext一下. IEnumerator有三个接口: Current:返回一个object

Unity中使用协程实现倒计时功能

unity中协程的功能很强大,能够充分发挥unity协程功能的地方就是游戏的倒计时,今天我们就来实现一个简易版本的倒计时. 新建一个场景,给camera添加一个脚本,脚本内容如下: using UnityEngine; using System.Collections; public class ShowNumber : MonoBehaviour { private int tmp = 10; // Use this for initialization void Start () { //开

Goroutine并发调度模型深度解析之手撸一个协程池

golanggoroutine协程池Groutine Pool高并发 并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题:Go语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开发者去探究的,而Go语言中的并发(并行)编程是经由goroutine实现的,goroutine是golang最重要的特性之一,具有使用成本低.消耗资源低.能效高等特点,官方宣称原生goroutine并发成千上万不成问题,于是它也成为Gopher们经常

unity里头的协程

1 IEnumerator ie = null; 2 3 void Start() 4 { 5 ie = coroutinFunc(); //这里只是新建了一个协程,并不会执行协程函数里的代码,需要调用StartCoroutine方法或者ie.MoveNex才会执行协程函数里的代码 6 } 7 8 IEnumerator coroutinFunc() 9 { 10 yield return 0; 11 } 在没有调用StartCoroutine方法来执行协程函数的时候,ie.MoveNext才会

Unity里的协程Coroutines

Unity里的Coroutine在帮助我们实现序列化事件时尤其方便.可以让事件依次发生,可以让事件A等待事件B结束后才开始执行. 但需要厘清几个基本概念. Coroutines不是多线程,不是异步技术.Coroutines都在MainThread中执行,且每个时刻只有一个Coroutine在执行. Coroutine是一个function,可以部分地执行,当条件满足时,未来会被再次执行直到整个函数执行完毕. A coroutine is a function that is executed p

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

前沿:这章节,将简单的总结一下如何开启协程,关闭协程,以及使用协程的注意事项. 一.如何开启协程: private void Start() { m_SpherePrefab = Resources.Load<GameObject>("Test/Sphere_00"); Debug.Log("m_SpherePrefab = " + m_SpherePrefab); #region 协程的学习及使用 StartCoroutine(Test_00());

【Unity笔记】协程Coroutine的简单优化

一个最简单的协程,也至少需要2帧才能完成.第一帧走到yield return null停止,第二帧从此处接着执行完下面的操作.需求:如果缓存中存在某数据则直接使用,否则联网异步下载. private bool cached; // 该数据是否已有缓存 void Start(){ StartCoroutine(Download()); } IEnumerator WorkWhenDownload() { if(cached){ // 直接使用缓存 }else{ // 没有缓存,联网下载 WWW w