Unity3d 纠正上一篇协程讲解的错误

来源:互联网 发布:淘宝折扣 编辑:程序博客网 时间:2024/06/01 10:25

Unity协程里面一直有一个误区,包括网上的一些文章,所讲的(等待多少帧后执行),根据我和朋友的测试,得出的结论:
1.IEnumerator IETestInt()
{
Debug.Log("int或者float 1 " + System.DateTime.Now.Ticks);
yield return 1000;
Debug.Log("int或者float 2 " + System.DateTime.Now.Ticks);
}

很多人认为(包括我之前也认为)yield return 1000是等待1000帧后执行下面的代码,其实yield return 1000和yield return null是一样的,可以理解为等待下一帧执行。这里1000=null。所有这里的等待多少帧执行是不成立的。
并且IEnumerator是在LateUpdate之后执行(有朋友测试结果是IEnumerator是在Update之后执行,根据分析应该跟版本有关系,这里不做太多说明。)
测试代码如下:

using UnityEngine;using System.Collections;public class Tests : MonoBehaviour {    // Use this for initialization    void Start () {        StartCoroutine(IETest());        StartCoroutine(IETestInt());        StartCoroutine(IETestFrame());    }    // Update is called once per frame    void Update () {        Debug.Log("Update");    }    void LateUpdate()    {        Debug.Log("LateUpdate");    }    IEnumerator IETest()    {        Debug.Log("null1 "+System.DateTime.Now.Ticks);        yield return null;        Debug.Log("null 2 " + System.DateTime.Now.Ticks);    }    IEnumerator IETestInt()    {        Debug.Log("int或者float 1 " + System.DateTime.Now.Ticks);        yield return 1000;        Debug.Log("int或者float 2 " + System.DateTime.Now.Ticks);    }    IEnumerator IETestFrame()    {        Debug.Log("WaitForEndOfFrame " + System.DateTime.Now.Ticks);        yield return new WaitForEndOfFrame();        Debug.Log("WaitForEndOfFrame " + System.DateTime.Now.Ticks);    }}
0 0