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. 存疑。