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);
        }
    }
}

执行结果如下:

unity之StartCoroutine运行机制--懵逼了_第1张图片

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

但是下面的情况就是一个让我懵逼的情况:当我用上述代码里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的等待时间到了才停止。

unity之StartCoroutine运行机制--懵逼了_第2张图片


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

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

unity之StartCoroutine运行机制--懵逼了_第3张图片

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

你可能感兴趣的:(unity3D)