位置: 编程技术 - 正文

IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

编辑:rootadmin
IEnumerator/ IEnumerable在两者的使用上,有下面几点需要注意

推荐整理分享IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator object)。 2、IEnumerator object具体实现了iterator(通过MoveNext(),Reset(),Current)。 3、从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator object就是一个iterator。 4、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,client可以通过IEnumerable的GetEnumerator()得到IEnumerator object,在这个意义上,将GetEnumerator()看作IEnumerator object的factory method也未尝不可。

yield return

在unity C#中yield(中断)语句必须要在IEnumerator类型里。

C#方法,方法的返回类型为IEnumerator,返回值如(eg: yield return new WaitForSeconds(2); 或者 yield return null;)。yield不可以在Update或者FixedUpdate里使用。

yield就像是一个红绿灯,在满足紧跟在它后面的条件之前,这个协程会挂起,把执行权交给调用它的父函数,满足条件时就可以执行yield下面的代码。Normal coroutine updates are run after the Update function returns. A coroutine is function that can suspend its execution (yield) until the given given YieldInstruction finishes. Different uses of Coroutines:yield; Wait all Update functions called,The coroutine will continue on the next frame.yield WaitForSeconds(2); Continue after a specified time delay, after all Update functions have been called for the frameyield WaitForFixedUpdate(); Continue after all FixedUpdate has been called on all scriptsyield WWW; Continue after a WWW download has completed.yield StartCoroutine(MyFunc); Chains the coroutine, and will wait for the MyFunc coroutine to complete first.

yield return 跟 return 的区别:return 之后不会再返回到 return 后面的语句继续执行。

StartCoroutine

在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。 在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以开启一个线程。区别在于使用字符串作为参数可以开启线程并在线程结束前终止线程,相反使用IEnumerator 作为参数只能等待线程的结束而不能随时终止(除非使用StopAllCoroutines()方法);另外使用字符串作为参数时,开启线程时最多只能传递 一个参数,并且性能消耗会更大一点,而使用IEnumerator 作为参数则没有这个限制。 在Unity3D中,使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该 MonoBehaviour中的协同程序。 还有一种方法可以终止协同程序,即将协同程序所在gameobject的active属性设置为false,当再次设置active为ture时,协同程 序并不会再开启;如是将协同程序所在脚本的enabled设置为false则不会生效。这是因为协同程序被开启后作为一个线程在运行,而 MonoBehaviour也是一个线程,他们成为互不干扰的模块,除非代码中用调用,他们共同作用于同一个对象,只有当对象不可见才能同时终止这两个线 程。然而,为了管理我们额外开启的线程,Unity3D将协同程序的调用放在了MonoBehaviour中,这样我们在编程时就可以方便的调用指定脚本 中的协同程序,而不是无法去管理,特别是对于只根据方法名来判断线程的方式在多人开发中很容易出错,这样的设计保证了对象、脚本的条理化管理,并防止了重 名。

示例1IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

运行结果:

运行结果:示例二

场景如下,一个球一个平面。

球的控制器

下面的脚本拖拽到地面上运行结果

参考

Unity协程(Coroutine)原理深入剖析再续 - - 参考) - Unity Tutorial -

<2> unity3d 分包与上google play 之具体实战 上一篇已经把准备工作已经做好了。现在开始实战了。激动么么哒有没有!第一步:下载插件包(这里收了1分,如果实在没有资源分的可以@我)

Unity3d MonoDevelop格式化代码 前一段时间一直在网上查找此类的文章,一直没有找到,不知道大家都不爱研究还是懒的写博客,今天我当次雷锋。我来小写一下。不要感谢我,请叫

unity3d在线更新资源(4) 经过一天的尝试,终于确认方案可行,主要代码如下:usingUnityEngine;usingSystem.IO;usingSystem.Threading;usingSevenZip;usingAwesome.Net.Compression;usingSystem.Collections;usingSy

标签: IEnumerator/ IEnumerable/ yield return/ StartCoroutine 详解

本文链接地址:https://www.jiuchutong.com/biancheng/378732.html 转载请保留说明!

上一篇:Unity下Profiler的使用(unity find references in scene)

下一篇:<2> unity3d 分包与上google play 之具体实战

  • 停车费手撕票如何填写申报表
  • 回退税款所属期后怎么返回
  • 垫付运费的运费税怎么做分录
  • 专项应付款和政府补助的区别是什么
  • 新公司开基本户银行选择
  • 应收账款和应付账款的区别
  • 小规模纳税人免征增值税政策
  • 销售免税产品要计算销项税吗
  • 报税利润表的第二季度本期金额本年累计金额是什么
  • 工商年报填好后怎样公示
  • 企业所得税税率有几个档次
  • 个人资金借给企业
  • 收入工程款后什么时候计提印花税
  • 财务人士必知消防知识
  • 固定资产折旧提完了之后还要怎么处理吗
  • 销售原材料的账务处理
  • 投资公司收到的发票
  • 预收货款属于资金投入吗
  • 三方协议是先签先干活
  • 跨年度的成本费用发票怎么入账
  • 投资管理公司收费
  • 稽查查补是什么意思
  • 小规模纳税人如何计算增值税
  • 年增收节支总额与新增利税的关系
  • 企业外籍个人子女教育补贴
  • 商用房的增值税是多少
  • 国际代理运费和港杂费一样吗
  • win10外接音响没反应
  • window10主题的颜色浅了
  • 虚拟机怎么安装iso镜像文件
  • 企业退款如何走账
  • php数组函数,选班长
  • os x 10.10 yosemite自动纠正怎么关?os x yosemite自动纠正功能关闭教程
  • yolov5 anchors 中 K-means聚类
  • 车间装修预算表
  • 一个简单安全的小故事
  • 公司财务认证负责人实名认证需要承担责任吗
  • 为什么我们认为北京人已经学会使用火
  • 前端经典面试题及答案
  • 多智能体概念
  • 软件开发增值税即征即退政策
  • 增值税政策执行口径存在的问题及建议
  • 收到返利冲成本还是记收入
  • 母公司可以免子女税吗
  • 事业结余期末余额在借方
  • python中类的属性
  • java的范式
  • mysql常见优化手段
  • 进项税额抵减额怎么算
  • 工伤住院期间用人单位如何补偿
  • 电子发票怎么开具流程呢?
  • 出差的招待费应由谁承担
  • 税务安全证书应用客户端不成功是什么意思
  • mysql编程一般步骤
  • 注册资本与实收资本是否一致
  • 出口销售确认书的条款
  • 私人账户可以打钱到公司账户吗
  • 政府专项资金补助计入什么科目
  • 农产品收购发票如何抵扣进项税
  • 增值税欠税及滞纳金计算
  • 应付职工薪酬账户贷方登记的是
  • mysql8.0.23
  • sqlserver自定义函数在哪查看
  • win7 双击不能打开文件
  • win7系统玩游戏好吗
  • nclaunch.exe - nclaunch进程有什么用 是什么意思
  • jusched.exe是什么进程
  • win7如何打开浏览器
  • 详细的收藏
  • node.js怎么用
  • fragment detach
  • 解决跨域的原理
  • js垂直对齐
  • js对象用法
  • 下拉列表框模糊匹配
  • 国家税务局上的电子发票如何作废
  • 单位自有住房免增值税吗
  • 县里的附加税
  • 垠坤集团是属于国企吗
  • ecco made in china
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设