unity3d - Unity - 在什么情况下我应该添加 Time.deltaTime?

标签 unity3d frame timedelta rigid-bodies

我是 Unity 的新手,我多次看到需要添加 Time.deltaTime。什么情况下应该加?我知道这是为了在框架计算机快速刷新时不会有多余的电量。

例如,在下一种情况下,我是否需要添加Time.deltaTime

playerRigidbody.AddForce(Vector3.up * 100 * Time.deltaTime, ForceMode.Impulse);

最佳答案

Time.deltaTime 是引擎处理前一帧所花费的秒数。它的计算相当简单:它使用系统的内部时钟来比较引擎开始处理前一帧时的系统时间和引擎开始处理当前帧时的系统时间。每个主板都有一个“系统时钟”,负责跟踪时间。操作系统可以访问该系统时钟并提供 API 来读取该时钟。 Unity 从该 API 获取时间,这就是同步的方式。

将游戏想象成电影,它本质上是一系列图像。不同之处在于,电影以每秒 24 张图像的固定速率呈现,而游戏则没有固定的帧速率。

在电影中,如果一辆汽车以每秒 1 米的速度行驶,则每张图像会使它移动 1/24 米,而在 24 张图像(1 秒)后,汽车将正好行驶 1 米。这很容易,因为我们知道每一帧正好需要 1/24 秒。

在游戏中,我们必须做同样的事情,只是帧速率不同。有些帧可能需要 1/60 秒,有些可能需要 1/10 秒。我们不能使用固定比率。我们必须使用 Time.deltaTime 而不是固定数字。每一帧,汽车将移动与帧的时间成正比的距离。大约 1 秒后,汽车将行驶大约 1 米

Delta 是有限差分的数学符号。在谈论随时间变化的事物时,它在英语中的使用非常普遍。

deltaTime是时间差,所以是Delta

较短的条款

随着时间的推移移动对象时,您必须始终使用 Time.deltaTime,可以自己提供,也可以使用默认使用 Time.deltaTime 的 SmoothDamp 等函数(尽管几乎没有任何函数这样做)。但是您绝不能将 Time.deltaTime 用于已经与帧速率无关的输入,例如鼠标移动,因为在这种情况下使用 Time.deltaTime 将与您的预期相反。

如果您不确定,可以随时打开和关闭垂直同步并观察任何潜在的速度差异。如果游戏已经以接近显示器刷新率的方式运行,则改用 Application.targetFrameRate。

关于unity3d - Unity - 在什么情况下我应该添加 Time.deltaTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65951528/

相关文章:

Python 时间增量 : can't I just get in whatever time unit I want the value of the entire difference?

c# - Samsung Gear VR - 将武器附加到玩家身上

audio - 多个敌人拥有自己的音频源和剪辑,使我的游戏的音频滞后

ffmpeg - 使用 ffmpeg 或其他软件从视频中每个场景变化的中间生成缩略图

python - 如何通过加入 Pandas 中的现有列来创建新列

python - 将 Pandas 时间序列转换为时间增量

c# - 选择文本文件用作 Unity 中的字典

c# - 我在 Unity 中的第一个 C# 游戏(介绍玩家偏好)

iframe - Google Analytics、iframe 和跨域

javascript - Jquery 帧间通信