Unity -在什么情况下我应该添加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是时间差,所以它是

<<p>

短术语/strong>当移动对象时,你必须始终使用time . deltatime,或者通过自己提供它,或者使用像SmoothDamp这样默认使用time . deltatime的函数(几乎没有函数这样做)。但是你绝对不能将Time.deltaTime用于那些已经与帧无关的输入,比如鼠标移动,因为在这种情况下,使用Time.deltaTime将会适得其反。

如果你不确定,你可以随时切换垂直同步开关,观察任何潜在的速度差异。如果游戏运行速度已经接近显示器刷新率,那么就使用Application。targetFrameRate。

简单来说

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

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


是否需要?

现在,如果你需要使用它完全取决于你的具体用例!在AddForce的情况下:NO!.

力影响速度一个物理对象的。速度本身等于an绝对每秒向量。

通常AddForce有两个用例:

  • 连续调用但在FixedUpdate

    因为FixedUpdate不是每一帧都被调用无论如何,在固定的实时间隔(默认为0.02秒)下,您不需要Time.deltaTime。文档已经在示例中提供了这个。

  • 无论如何,它只被称为单个事件(例如跳跃)

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

最新更新