unity3d - 使仿真时间与实时同步
问题描述
我在做一个模拟。它必须在机器之间保持一致,所以我没有使用Time.deltaTime
,而是使用固定值来表示帧持续时间(比如 0.002 秒)。
问题是:虽然模拟是一致的,但游戏帧持续时间的不规则性使得它看起来在长帧中移动 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();
}
}
您可能想要使用 Unity 的 Fixedupdate 而不是使用Time.deltatime。您可以像使用 Update() 一样使用它,但它不会触发每一帧,而是以固定的时间间隔触发它。默认为 0.02 秒,您可以从编辑 > 设置 > 时间 > 固定时间步长更改它。这用于物理计算。
我希望这能回答您的问题和/或帮助您解决问题。如果有什么我错过了,请告诉我,我会尽力给出更好的答案。
推荐阅读
- jekyll - 将变量传递给标签 Jekyll
- amazon-ec2 - 在切换到按使用分钟数付款时,重用 AWS 实例算法是否仍然有用?
- docker - 无法从外部访问暴露的 docker 端口
- python - 在 Pandas to_csv 创建的文件上运行 BCP IN 时处理平面文件引用转义
- excel - 在表中查找值并获取索引
- javascript - 我如何构建一个正则表达式来排除除字母和数字之外的所有内容?
- flutter - 使堆栈背景中的 ListView 可滚动
- python - 将 tqdm 与多处理一起使用
- c++ - 是否有命令检查我的动态数组中的对象是动态的还是静态的?
- r - 使用矩阵的 R 单元素子集(又名 `[[`)