为什么要乘增量时间?

问题描述 投票:1回答:5

我正在用统一性制作游戏,并使某些对象旋转到位。 Ive环顾了如何实现这一目标,并找出了实现方式。 --->

 public class Rotator : MonoBehaviour {

 int speed = 2;

// Update is called once per frame
void Update () {

    transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime *speed);

  }
}

现在我的问题是,为什么我必须做“ * Time.deltaTime”?请解释这整行。

谢谢,罗姆

c# unity3d time timedelta
5个回答
6
投票

要了解为什么必须使用Time.deltaTime,首先需要了解游戏引擎的高级流程。

[基本上,游戏是一种应用程序,需要不断等待玩家的输入并对输入做出反应并渲染场景。每个游戏的核心都有一个游戏循环,只要应用程序正在运行,该循环就处于活动状态。可以这样简单:

while(active) 
{
  update(); // react to player's input/update player position etc
  render(); // render the scene
}

如您所见,循环内的代码一直在执行,直到玩家的动作导致循环终止(也许他从游戏菜单上单击了“退出”)。在Unity中,附加到所有游戏对象的所有脚本的更新在游戏循环中被调用。

取决于应用程序运行的计算机,在给定的时间范围内,例如,通过您可以根据机器配置使用不同的帧速率。如果您无法以某种方式将所有更新同步到实际物理时间,则这将使事情变得很混乱。

为此,您可以在Unity脚本中使用Time.DeltaTime。这只是一个参数,它告诉您自上次调用脚本的Update以来经过了多少时间。

要特别回答您的问题,将旋转更新与deltaTime相乘是一种确保对象的旋转速度相同而与帧率无关的方法。


1
投票

时间增量通常是每个游戏循环更新或抽奖循环之间的时间差。它允许游戏循环/抽签周期事件的发生与CPU速度无关(动画和事件不会根据系统资源/ CPU速度而加快或减慢)。

[我们这些年龄足够大的人可以记得游戏没有这样做的时候。使用较高频率的CPU,某些游戏的运行速度会更快。俄勒冈步道就是一个很好的例子。


0
投票

独立于帧速率的游戏是指无论帧速率如何都以相同速度运行的游戏。例如,游戏在慢速计算机上可能以30 FPS(每秒帧)的速度运行,而在快速计算机上则以60 FPS的速度运行。帧速率独立的游戏在两台计算机上均以相同的速度进行(对象似乎以相同的速度移动)。另一方面,与帧速率有关的游戏在慢速计算机上以一半的速度进行,具有某种慢动作效果。制作独立的帧率游戏非常重要,以确保您的游戏对每个人来说都很有趣且可玩,无论他们拥有哪种计算机。当帧频下降时放慢速度的游戏会严重影响游戏玩法,使玩家感到沮丧和退出!因此,此Time.deltaTime使运动帧速率独立。


0
投票

在您的示例中,为了使transform以所需的speed旋转,它必须每帧旋转少量。将所有这些小的旋转放在一起,就可以在所需的speed位置上进行完整的旋转。

[Time.deltaTime是自上一帧以来的时间(即,自先前调用Update()起的时间)。


0
投票

Time.deltaTime用于使动作独立于帧速率。与fps无关,代码行在所有设备上的工作方式相似。因此,在这里,您的对象将在固定的时间内在所有设备中旋转相似的度数。

for transform.Rotate(new Vector3(1,0,0)* Time.deltaTime * speed);假设fps为60(1秒内60帧)。每帧的时间是0.016666666。对象在1秒钟内的旋转为2个单位(0.0166666 * 60帧* 2(其中2为速度)

如果fps为30,即一秒30帧,则每帧的时间为0.03333。对象在1秒钟内的旋转是2个单位(0.033333 * 30帧* 2(其中2是速度)

为了更好地理解,请通过以下链接:http://codesaying.com/time-deltatime-in-unity3d/

© www.soinside.com 2019 - 2024. All rights reserved.