Unity3D之协程(Coroutines Yield ).docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unity3D之协程(Coroutines

Unity3D之协程(Coroutines Yield ) 写游戏代码,往往最终需要代码为连续的事件.结果会像这样: [它可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行。] span?style=font-size:18px;private?int?state?=?0;?? void?Update()?? {?? ????????if?(state?==?0)??? ????????{?? ????????????????//做步骤0?? ????????????????state?=?1;?? ????????????????return;?? ????????}?? ????????if?(state?==?1)??? ????????{?? ????????????????//?做步骤1?? ????????????????state?=?2;?? ????????????????return;?? ????????}?? ????????//?...?? }?/span?? 往往使用yield语句更为方便.yield语句是一个特殊的返回类型,它确保函数从yield语句的下一行继续执行. span?style=font-size:18px;while(true)?{?? ????????//?做步骤0?? ????????yield?return?0;?? ?????????//?等待一帧?? ????????//?做步骤1?? ????????yield?return?2;?? ?????????//?等待两帧?? ????????//?...?? }?/span?? 你也可以传递时间值到yield语句,Update函数会在yield结束后执行下一语句. span?style=font-size:18px;??//?do?something?? ??yield?return?WaitForSeconds??(5.0);?? ??//等待5秒?? ??//?do?something?more...??/span?? 你可以入栈并连接协程. 这个例子将执行Do,但是do函数之后的print指令会立刻执行. span?style=font-size:18px;Do?();?? Console.WriteLine(This?is?printed?immediately);?? IEnumerator??Do?()?? {?? ????Console.WriteLine(Do?now);?? ????yield?return?new?WaitForSeconds??(2);???????? ????Console.WriteLine(Do?2?seconds?later);?? }?/span?? 这个例子将执行Do,并等待,直到Do完成再执行其他语句.【注:这里的等待是把线程时间交给其他任务,而不是阻塞式等待】 span?style=font-size:18px;//?启动协程?? yield?return?StartCoroutine(Do);?? Console.WriteLine(Also?after?2?seconds);?? Console.WriteLine?(这个print将在Do协程执行完以后显示。);?? IEnumerator??Do?()?? {???????? Console.WriteLine(Do?now);?? yield?return?new?WaitForSeconds??(2);?? Console.WriteLine(Do?2?seconds?later);?? }?? /span?? 任何事件处理程序都可以是协同程序 。 注意你不能在Update或FixedUpdate函数内使用yield,但是你能使用 StartCoroutine ?开始一个函数. 查看 YieldInstruction , WaitForSeconds , WaitForFixedUpdate , Coroutine ?and MonoBehaviour.StartCoroutine ?可以获得更多使用yield的信息. yield return可以看做是一种特殊的return,会返回到父类继续执行,但是yield return后面的类型或方法会有一个执行条件,当条件满足时会回调包含yield的子函数,例如下面代码 例1: span?style=font-size:18px;void?Start?()?{?? ?? ?? ????????print(Starting:?+?Time.time);?? ?? ?? ????????StartCorout

文档评论(0)

cj80011 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档