关于unity协程等待方法WaitForSecondsRealtime的发现

public class WaitForSecondsRealtime : CustomYieldInstruction
    {
        private float m_WaitUntilTime = -1f;

        /// <summary>
        ///   <para>The given amount of seconds that the yield instruction will wait for.</para>
        /// </summary>
        public float waitTime
        {
            get;
            set;
        }

        public override bool keepWaiting
        {
            get
            {
                bool flag = this.m_WaitUntilTime < 0f;
                if (flag)
                {
                    this.m_WaitUntilTime = Time.realtimeSinceStartup + this.waitTime;
                }
                bool flag2 = Time.realtimeSinceStartup < this.m_WaitUntilTime;
                bool flag3 = !flag2;
                if (flag3)
                {
                    this.m_WaitUntilTime = -1f;
                }
                return flag2;
            }
        }
        /// <summary>
        ///   <para>Creates a yield instruction to wait for a given number of seconds using unscaled time.</para>
        /// </summary>
        /// <param name="time"></param>
        public WaitForSecondsRealtime(float time)
        {
            this.waitTime = time;
        }
    }

从源码里可以看出,在等待时间到达的那一帧,flag2为fales,所以m_WaitUntilTime 被置为了-1,当同一帧再次获取keepWaiting值时,flag2就重新报变为true了。因为update在协程前调用,所以当update里每帧都获取keepWaiting时,协程就无法进行下去。
如果该协程对象已经结束,那keepWaiting会保持为fales的状态,直到被再次获取。所以协程结束后可以用keepWaiting去判断该协程是否还在运行,但是一旦调用后,keepWaiting将变为true

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值