unity WaitForFixedUpdate在当前物理帧的最后执行

WaitForFixedUpdate在当前物理帧的最后执行,而不是下一物理帧的最后或者之前:

https://docs.unity3d.com/Manual/ExecutionOrder.html

 

Time.frameCount是逻辑帧自增,和物理帧无关 

https://answers.unity.com/questions/933751/timeframecount-vs-timerenderedframecount.html

 

 

// Update is called once per frame
void Update()
{
    Debug.LogError("Update  " + Time.frameCount);
}
private static int fixedCount = 0;
private void FixedUpdate()
{
    fixedCount = fixedCount + 1;
    Debug.LogError("0 FixedUpdate  " + Time.frameCount + " fixedCount:" + fixedCount + " Time:" +  DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
    Debug.LogError("1 FixedUpdate " + Time.frameCount + " fixedCount:" + fixedCount + " Time:" +  DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
    this.StartCoroutine(CountDown_WaitForFixedUpdate());
    Debug.LogError("2 FixedUpdate " + Time.frameCount + " fixedCount:" + fixedCount + " Time:" +  DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
}
IEnumerator CountDown_WaitForFixedUpdate()
{
    Debug.Log("1yield WaitForFixedUpdate - step  " + Time.frameCount + " fixedCount:" + fixedCount + " Time:" +  DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
    yield return new WaitForFixedUpdate();
    Debug.Log("2yield WaitForFixedUpdate - step   " + Time.frameCount + " fixedCount:" + fixedCount + " Time:" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"));
    //yield return new WaitForFixedUpdate();
    //         Debug.Log("3yield WaitForFixedUpdate - step  " + Time.frameCount);
}

 

 下图红框内分别是 WaitForFixedUpdate 和 下一物理帧的FixedUpdate日志。

unity文档 https://docs.unity.cn/ScriptReference/WaitForFixedUpdate.html  里说"Waits until next fixed frame rate update function. "  和测试不一样。 精确到ms的时间一个是 892一个是920.  存疑。

 

posted @ 2022-01-11 14:23  sun_dust_shadow  阅读(680)  评论(0编辑  收藏  举报