Time.deltaTime

Time.deltaTime 會取得每個遊戲 Update() 之間的秒數。

deltatime

由於 Update 的執行頻率(fps) 會依電腦速度有所差異,所以在較好的電腦上可以穩定執行 30fps,也就是每秒執行 30 次 Update();而電腦運算較弱的情況,可能只有 10fps,也就是每秒執行 10 次 Update()。

  • 在 30fps 時:
    Time.deltaTime = 1 / 30 = 0.0333..

  • 在 15fps 時:
    Time.deltaTime = 1 / 15 = 0.0666..

未使用 Time.deltaTime 的情況:

在 Update() 裡使用 Translate 來移動角色,固定移動速度為 0.1。

no-deltatime

void Update()
{
    transform.Translate(0, 0, 0.1f);
}
FPS每個Update走的距離每秒走的距離
300.130 * 0.1 = 3
150.115 * 0.1 = 1.5

使用 Time.deltaTime 達成一致:

使用 Time.deltaTime,在較低 fps 的狀態下,每一步的移動距離會變大。 use-deltatime

void Update()
{
    transform.Translate(0, 0, 10 * Time.deltaTime);
}
FPS每個Update走的距離每秒走的距離
3010 * 0.0333 = 0.33330 * 0.333 = 9.99
1510 * 0.0666 = 0.66615 * 0.666 = 9.99

TIP

通常在 Update 裡面有改變距離時,都需要乘上 Time.deltaTime 才對。

官方文件 Time.delatTimeopen in new window

Last Updated:
Contributors: Vincent Chen