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

Unity - In what cases should I add Time.deltaTime?

我是 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。

简单来说

Time.deltaTime 是自上一帧渲染后经过的时间。

通过将一个值乘以它,您基本上可以将它从 Something per frame 转换为 Something per second


需要吗?

现在是否需要使用它完全取决于您的具体用例!对于 AddForceNO!.

力影响物理对象的速度。速度本身已经 一个 绝对每秒 矢量。

通常 AddForce 有两个用例:

  • 连续调用但在FixedUpdate

    因为 FixedUpdate 并不是每帧 都被调用 而是以固定的实时间隔(默认为 0.02 秒)调用,因此您不需要 Time.deltaTime . The Doc already provide this in the example.

  • 它无论如何只被称为单一事件(例如通过跳跃)

    这里没有连续的东西,所以你不需要也不想使用 Time.deltaTime,因为单个事件无论如何都不能依赖于帧速率。