我在做一个模拟。它必须在机器之间保持一致,所以我没有使用 Time.deltaTime
但用一个固定的值来表示帧的持续时间(比如0.002s)。
问题是:虽然模拟时间一致,但由于游戏帧的持续时间不规则,使得在长帧中它移动了X,在短帧中它也移动了X,使得它看起来时常很诡异。
问题:有没有一种方法可以让实时与模拟时间同步,而不损失模拟精度?
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来改变它。这是用于物理计算的。
我希望这回答了你的问题,或者帮助你解决你的问题。如果我有什么遗漏的地方,请告诉我,我会尽量给出更好的答案。