在编辑器下如果你要使用时间相关的操作,当你使用在EditorWindow
的Update
中使用Time.delta
,会发现好像非常的不准确,时快时慢的。
就像下面:
1 2 3 4 5 6 7 8 9 10
| private void Update() { OneFrameTimer -= Time.deltaTime; if (OneFrameTimer <= 0) { OneFrameTimer = 1f / FPS; CurrentFrameID += 1; } }
|
我们可以使用编辑器下的协程:EditorCoroutineUtility
,和DateTime
来配合获取一个准确的时间。
如下:在协程开始的时候记录开始时间和开始帧,在循环中计算当前时间与开始时间的时间差值。
再通过帧率计算出当前帧:帧数 = 时间 * 帧率
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| private IEnumerator PlayCoroutine() { startTime = DateTime.Now; startFrameIndex = CurrentFrameID; while (IsPlaying) { float differ = (float)DateTime.Now.Subtract(startTime).TotalSeconds; CurrentFrameID = (int)(differ * FPS * 1) + startFrameIndex; if (CurrentFrameID >= Asset.Duration) { IsPlaying = false; } yield return null; } yield break; }
|