位置: 编程技术 - 正文

关于Unity协同程序的全面解析(unity协程的工作原理)

编辑:rootadmin

推荐整理分享关于Unity协同程序的全面解析(unity协程的工作原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity协同程序的特点,unity协同程序可以做些什么,unity协程的工作原理,unity协程yield,unity协程的工作原理,unity 协同程序,unity协程的工作原理,unity 协同程序,内容如对您有帮助,希望把文章链接给更多的朋友!

1.什么是协调程序

unity协程是一个能暂停执行,暂停后立即返回,直到中断指令完成后继续执行的函数。

它类&#;一个子线程单独出来处理一些问题,性能开销较小,但是他在一个MonoBehaviour提供的主线程里只能有一个处于运行状态的协程。

2.协同程序的特点

1、协程在中断指令(YieldInstruction)产生时暂停执行

2、协程一暂停执行便立即返回 //中断协程后返回主函数,暂停结束后继续执行协程剩余的函数。

3、中断指令完成后从中断指令的下一行继续执行

4、同一时刻、一个脚本实例中可以有多个暂停的协程,但只有一个运行着的协程

5、函数体全部执行完后,协程结束

6、协程可以很好的控制跨越一定帧数后执行的行为

7、协程在性能上、相比于一般函数几乎没有更多的开销

3.创建一个协程函数

注意:

协同函数的返回&#;的类型必须是Coroutine,Coroutine继承与Yieldinstruction。

所以协同程序的返回类型就只能是null,等待的时间,等待的帧数。。由此可见WWW 也是实现了Coroutine的~

4.开始一个协同程序

通过MonoBehaviour提供的StartCoroutine方法来实现启动协同程序。

1、StartCoroutine(IEnumerator routine);

优点:灵活,性能开销小。

缺点:无法单独的停止这个协程,如果需要停止这个协程只能等待协同程序运行完毕或则使用StopAllCoroutine();方法。

2、StartCoroutine (methodName:string, value : object = null);

优点:可以直接通过传入协同程序的方法名来停止这个协程:StopCoroutine(string methodName);

缺点:性能的开销较大,只能传递一个参数。

5.停止协同程序

1、StopCoroutine(string methodName);

2、StopAllCoroutine();

3、设置gameobject的active为false时可以终止协同程序,但是再次设置为true后协程不会再启动。

6.协同程序的执行顺序

开始协同程序 -> 执行协同程序 -> 中断协同程序(中断指令)-> 返回上层继续执行

->中断指令结束后继续执行协同程序剩下的内容

关于Unity协同程序的全面解析(unity协程的工作原理)

7.协同程序的注意事项

1、不能再Update或者FixUpdate方法中使用协同程序,否则会报错。

2、关于中断指令:

中断指令/YieldInstruction,一个协程收到中断指令后暂停执行,返回上层执行同时等待这个指令达成后继续执行。

指令 描述 实现

WaitForSeconds 等待指定秒数 yield return new WaitForSeconds(2);

WaitForFixedUpdate 等待一个固定帧 yield return new WaitForFixedUpdate();

WaitForEndOfFrame 等待帧结束 yield return new WaitForEndOfFrame();

StartCoroutine 等待一个新协程暂停 yield return StartCoroutine(other coroutine);

WWW 等待一个加载完成 yield return www;

注意:

1、一个协程A里在中断指令里再启动一个协程B,在yield return StartCoroutine时执行的顺序是:

①:先执行新协程B;

②:新协程B暂停后向上返回协程A,A协程暂停,返回协程A的上层函数;

③:因为决定协程A是否结束的标志是新协程B是否结束,所以当新协程B结束后返回协程A继续执行余下的内容;

④:协程A执行结束。

2、关于WWW的中断指令可参考API:

You can inspect the isDone property to see if the download has completed or yield the download object to automatically wait until it is (without blocking the rest of the game).

你可以检查isDone属性来查看是否已经下载完成,或者yield自动等待下载物体,

直到它被下载完成(不会影响游戏的其余部分)。

3、协同程序的中断返回机制也可用于指定时间间隔执行一个程序:

8.例子

lg1、举例说明协同程序的执行流程

//输出结果顺序是,1,2,3,4,5,6

lg2、加载指令(通过WWW加载本地文件)

注意:

//大概执行流程,点击按钮后开始执行协同程序,WWW按照提供的url进行加载,完毕后 yield return www;中断指令跳转到主线程。

//主线程继续执行其他内容,www在加载完成后跳出中断继续执行余下内容。

//加载完毕,实例化加载内容。

Unity中使用UGUI与ScrollView的练习 一、相关组件ScrollRectMaskGridLayoutGroupScrollbar二、步骤1、创建一个Panel,命名为ScrollRect,添加ScrollRect组件2、在ScrollRect下创建一个子Panel,命名为Grid,添加Gri

Unity的安卓上的移动C#脚本 usingUnityEngine;usingSystem.Collections;publicclassMobileMove:MonoBehaviour{publicfloatspeed=0.3F;voidUpdate(){if(Input.touchCount0Input.GetTouch(0).phase==TouchPhase.Moved){Vector2touchDeltaPosition

unity中判断渲染物体是否在摄像机内渲染 1、先声明我们的变量:spanstyle=font-size:px;///summary///isRender为true则表示在摄像机内,为false则相反////summaryprivateboolisRender;privatefloatlastTime;privatefloatcurrentT

标签: unity协程的工作原理

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

上一篇:Unity3D中脚本的执行顺序和编译顺序(unity3d脚本怎么用)

下一篇:Unity中使用UGUI与ScrollView的练习(unity ulua)

  • 什么是税务学
  • 税务行政复议是税务行政复议机关的裁决活动
  • 小规模未开票收入填在哪里
  • 以件数为印花税计税依据的有哪些
  • 收据四联分别叫什么
  • 资金结存科目余额对应
  • 房产企业赠送无形资产
  • 外商投资企业与内资合资是国企吗
  • 长期借款费用会减少吗
  • 垫资公司怎么收费50万
  • 劳务公司发放农民工工资的三种形式
  • 法院判罚利息怎么算
  • 学校付学生的现金奖励入什么科目
  • 资产负债表金额越来越大代表什么
  • 物业管理企业代管基金是什么
  • 取得甲供材料按简易征收发票能抵扣吗
  • 学校收取食堂管理费
  • 征信证明怎么开啊
  • 企业购置房产折旧
  • 开发票有时间限制吗?
  • 自营出口与委托代理哪个划算
  • 华为鸿蒙系统怎么看安卓版本
  • 股票退市后股票怎么处理
  • 固定资产减值测试时预计其未来现金流量不应考虑的因素
  • 期末增值税进项税大于销项税的金额计入哪里
  • 结转本月主营业务收入800000元,营业外收入2500元
  • scm wms
  • 红掌的养殖方法和注意事项
  • 如何查询税务完税证明
  • 存货销售收入
  • 小企业会计准则财务报表至少包括
  • 【C#+JavaScript+SQL Server】实现Web端考试系统 六:后台管理模块设计(附源码和资源)
  • vue新手教程
  • 转让旧机器的会计分录
  • python中exec执行如何获取返回值
  • 其他资本公积可以冲减吗
  • 货币基金分红交多少税
  • 开具免税的发票,"税率"栏该如何填开?
  • 去年的电费能查到吗
  • sql server遇到的主要问题及解决方法
  • db2数据库管理的工具
  • 工会经费余额在借方还是贷方
  • 当年发生亏损会影响所有者权益吗
  • 房屋维修基金帐户处理办法
  • 跨月的增值税普通发票能作废吗
  • 个人独资企业与有限公司的区别
  • 应付账款账面价值扣除商业折扣吗
  • 职工罚款的会计处理办法
  • 增值税附加税印花税都是什么
  • 银行承兑汇票背面怎么填写
  • 保险公司赔付进项税
  • 电子记账凭证需要划线吗
  • 销售一批产品给丙公司,该批产品标价200万yuan
  • 本月增加的固定资产本月可以进行部门转移
  • 新公司建账初始数据可以全部为零吗
  • 如何激活windows2008server
  • centos7如何添加永久静态路由
  • exe什么意思?
  • csinsmnt.exe进程的作用介绍 csinsmnt是什么进程
  • window10突然激活失效
  • 微软将为11增加AI助手
  • 打开word显示
  • windows7输入
  • cocos2dx开发的游戏
  • perl格式化输出
  • domReady的实现案例
  • JavaScript File API实现文件上传预览
  • js过滤特殊字符
  • pjblog修改技巧汇总
  • Android IntentFilter 匹配原则浅析
  • js实现表格动态合并单元格
  • javascript面向对象编程指南
  • python socket模块
  • 个人工资扣税标准计算
  • 地税怎么查个人所得税
  • 生产税净额包含企业所得税吗
  • 日常生活中有哪些税
  • 不动产租赁如何征税
  • 山东税务自然人注册怎么回事
  • 出口退税预申报有疑点怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设