使模拟时间与实时时间同步

问题描述 投票:1回答:1

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

问题是:虽然模拟时间一致,但由于游戏帧的持续时间不规则,使得在长帧中它移动了X,在短帧中它也移动了X,使得它看起来时常很诡异。

问题:有没有一种方法可以让实时与模拟时间同步,而不损失模拟精度?

unity3d time synchronization simulation
1个回答
4
投票

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();
    }
}

与其使用Time.deltatime,你可能想使用Unity的 固定更新.你使用它就像你使用Update()一样,但是它不是每一帧都发射,而是在一个固定的时间间隔内发射。默认值是0.02s,你可以通过Edit > Settings > Time > Fixed Timestep来改变它。这是用于物理计算的。

我希望这回答了你的问题,或者帮助你解决你的问题。如果我有什么遗漏的地方,请告诉我,我会尽量给出更好的答案。

© www.soinside.com 2019 - 2024. All rights reserved.