将仿真时间与实时同步

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 帮助您解决了问题。如果我遗漏了什么,请告诉我,我会尽力给出更好的答案。