unity之StartCoroutine运行机制--懵逼了

不知今天大脑CPU转速不够还是怎么了,发现StartCoroutine的运行机制让我懵逼了!!!

简单概述一下:当update里的变量条件和 StartCoroutine();方法里的变量是同一个的话 StartCoroutine();的执行会循环执行和update一样,直到超过StartCoroutine();等待时间才会停止。

具体情况如下:

首先看下面代码,通过i条件来控制StartCoroutine的触发。

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    float i = 1;
    int num = 0;
   
    // Use this for initialization
    void Start()
    {
      //  StartCoroutine(waitme(1));
    }

    // Update is called once per frame
    void Update()
    {
        i += 1;
        if (i == 13)
        {
            Debug.Log("i是多少?" + i);
            StartCoroutine(waitme(1));
        }

        //if (num == 0)
        //{
        //    StartCoroutine(waitme(1));
        //}

    }
    IEnumerator waitme(int a)
    {       
        yield return new WaitForSeconds(a);
        Debug.Log("两秒已过了"+num);

        if (num < 100000)
        {
            num = num +1;
            Debug.Log("num多少?????? " + num);
        }
    }
}

执行结果如下:


这个看起来非常正常。正是协程。

但是下面的情况就是一个让我懵逼的情况:当我用上述代码里Update里的另个条件来触发StartCoroutine就不同了。等待还是会等待的,但等待时间过去就会循环执行yield后面的代码。

下面是代码:(只是把上个代码里的触发条件换成了下面的)

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    float i = 1;
    int num = 0;
   
    // Use this for initialization
    void Start()
    {
      //  StartCoroutine(waitme(1));
    }

    // Update is called once per frame
    void Update()
    {
        //i += 1;
        //if (i == 13)
        //{
        //    Debug.Log("i是多少?" + i);
        //    StartCoroutine(waitme(1));
        //}

        if (num == 0)
        {
            StartCoroutine(waitme(1));
        }

    }
    IEnumerator waitme(int a)
    {       
        yield return new WaitForSeconds(a);
        Debug.Log("两秒已过了"+num);

        if (num < 100000)
        {
            num = num +1;
            Debug.Log("num多少?????? " + num);
        }
    }
}

再看执行结果;竟然和update一样了,一直执行,直到StartCoroutine的等待时间到了才停止。



上图这个num会执行到49,当我把代码中StartCoroutine等待时间a变成2之后,看下图:

可见它的循环时间是由a来决定的。。。


我只想知道StartCoroutine是什么运行机制???宝宝懵逼了!!!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值