首页 > 解决方案 > 使仿真时间与实时同步

问题描述

我在做一个模拟。它必须在机器之间保持一致,所以我没有使用Time.deltaTime,而是使用固定值来表示帧持续时间(比如 0.002 秒)。

问题是:虽然模拟是一致的,但游戏帧持续时间的不规则性使得它看起来在长帧中移动 X,而在短帧中它也移动 X,使其有时看起来很奇怪。

问题:有没有办法在不损失模拟精度的情况下使实时与模拟时间同步?

标签: unity3dtimesynchronizationsimulation

解决方案


Time.deltatime 告诉我们自上一帧以来已经过去了多少时间。

来自 Unity文档

此属性提供当前帧和前一帧之间的时间。

如果您在帧之间等待固定时间,则帧速率将影响您的模拟时间。

如果你想在现实世界中每 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 秒,您可以从编辑 > 设置 > 时间 > 固定时间步长更改它。这用于物理计算。

我希望这能回答您的问题和/或帮助您解决问题。如果有什么我错过了,请告诉我,我会尽力给出更好的答案。


推荐阅读