将仿真时间与实时同步
Synchronize simulation time with real time
我正在做模拟。它必须在机器之间保持一致,所以我没有使用 Time.deltaTime
,而是使用固定值来表示帧持续时间(比如 0.002s)。
问题是:虽然模拟是一致的,但是游戏帧时长的不规则性使得长帧看起来像移动X,短帧也移动X,看起来很奇怪不时。
问题:有没有办法在不损失模拟精度的情况下使实时与模拟时间同步?
Time.deltatime 告诉我们自上一帧以来经过了多少时间。
来自 Unity documentation:
This property provides the time between the current and previous frame.
如果你等
帧之间的固定时间,帧率将影响您的模拟时间。
如果你想在现实世界中每1秒在游戏世界中做一些事情,你需要使用Time.deltatime。您可以通过向变量添加 Time.deltatime 来跟踪经过了多少时间,并检查它是否等于或大于所需时间。
private float timer = 0.0f;
private float waitTime = 1.0f;
void Update() {
timer += Time.deltatime;
if (timer >= waitTime) {
timer = 0.0f;
doStuff();
}
}
您可能想使用 Unity 的 Fixedupdate 而不是使用 Time.deltatime。
您可以像使用 Update() 一样使用它,但不是触发每一帧,而是触发它
在固定的时间间隔内。默认值为 0.02 秒,您可以从“编辑”>“设置”>“时间”>“固定时间步长”进行更改。这用于物理计算。
我希望这回答了您的问题 and/or 帮助您解决了问题。如果我遗漏了什么,请告诉我,我会尽力给出更好的答案。
我正在做模拟。它必须在机器之间保持一致,所以我没有使用 Time.deltaTime
,而是使用固定值来表示帧持续时间(比如 0.002s)。
问题是:虽然模拟是一致的,但是游戏帧时长的不规则性使得长帧看起来像移动X,短帧也移动X,看起来很奇怪不时。
问题:有没有办法在不损失模拟精度的情况下使实时与模拟时间同步?
Time.deltatime 告诉我们自上一帧以来经过了多少时间。
来自 Unity documentation:
This property provides the time between the current and previous frame.
如果你等 帧之间的固定时间,帧率将影响您的模拟时间。
如果你想在现实世界中每1秒在游戏世界中做一些事情,你需要使用Time.deltatime。您可以通过向变量添加 Time.deltatime 来跟踪经过了多少时间,并检查它是否等于或大于所需时间。
private float timer = 0.0f;
private float waitTime = 1.0f;
void Update() {
timer += Time.deltatime;
if (timer >= waitTime) {
timer = 0.0f;
doStuff();
}
}
您可能想使用 Unity 的 Fixedupdate 而不是使用 Time.deltatime。 您可以像使用 Update() 一样使用它,但不是触发每一帧,而是触发它 在固定的时间间隔内。默认值为 0.02 秒,您可以从“编辑”>“设置”>“时间”>“固定时间步长”进行更改。这用于物理计算。
我希望这回答了您的问题 and/or 帮助您解决了问题。如果我遗漏了什么,请告诉我,我会尽力给出更好的答案。