unity 协程笔记

协程就是:你可以写一段顺序的代码,然后标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码
协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代
简单来说就是控制代码在特地时间运行

IEnumerator LongComputation()
{
    while(someCondition)
    {
        /* 做一系列的工作 */

        // 在这里暂停然后在下一帧继续执行
        yield return null;
    }
}
 StartCoroutine(LongComputation())//启动协程运算

对协程是否执行进行条件判断

IEnumerator DoSomething(){
  /* ... */}

IEnumerator DoSomethingUnlessInterrupted(){
  IEnumerator e = DoSomething();
  bool interrupted = false;
  while(!interrupted)
  {
    e.MoveNext();
    yield return e.Current;
    interrupted = HasBeenInterrupted();
  }}

实现延时的效果

 IEnumerator WaitTurnDirection(float time)
    {
        yield return new WaitForSeconds(time);
    }
IEnumerator TellMeASecret(){
  PlayAnimation("LeanInConspiratorially");
  while(playingAnimation)
    yield return null;

  Say("I stole the cookie from the cookie jar!");
  while(speaking)
    yield return null;

  PlayAnimation("LeanOutRelieved");
  while(playingAnimation)
    yield return null;
}

然后我们可以使用下文这样的客户代码,来调用上文的程序,就可以实现延时的效果。

IEnumerator e = TellMeASecret();
while(e.MoveNext()) { 
    // do whatever you like
}

注意:如果在一个对象的前期调用协程,协程会立即运行到第一个 yield return 语句处,如果是 yield return null ,就会在同一帧再次被唤醒。

协程停止方法:通过gameObject.active = false 就可以停止协程的执行

IEnumerator & Coroutine

以上是我目前对协程的用法认识和理解,以后会继续完善补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值