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