unity中invoke*和waitforseconds在停止携程后的表现不同

时间:2022-02-08 19:48:03

实验一。下面代码中虽然停止ot,接下来的invoke有等待时间,但是start和f中的内容都执行了。

如果用waitforseconds,即使是0秒,后面的也不执行了!!!!主要是waitforseconds前有yield,

也就是等下一帧才开始执行waitforseconds,但是下一帧之前该携程已经停止了(对于该实验)。

也就是stopcoroutine只和相应的携程有关,和等待时间是无关的。

实验二。如果是把Time.timescale=0,涉及等待时间(大于零秒)的都会暂停!!!但是update之类不暂停!!!


using UnityEngine;

using System.Collections;

public class invokeyield : MonoBehaviour {

    // Use this for initialization
    IEnumerator Start () {
        yield return StartCoroutine ("ot");
        Debug.Log ("555");
    }
    IEnumerator ot()
    {
        for(int i=0;i<2;i++){
            yield return new WaitForSeconds (2);
            Debug.Log ("444");        

        }

       // Time.timeScale=0;

        StopCoroutine ("ot");
        //yield return new WaitForSeconds (0);
        Invoke ("f",1);
    }
    void f()
    {
        Debug.Log ("f");
    }
    // Update is called once per frame
    void Update () {
    }
}