How to Develop a Game
Time System
PublishDate: 2025-06-01 | CreateDate: 2025-06-01 | LastModify: 2025-06-01 | Creator:ljf12825

Unity的时间系统管理游戏中的时间流逝,包括帧率、时间步长、暂停和加速等

几个核心概念

1.Time.deltaTime

这是Unity时间系统中最常用的属性之一,它表示上一帧和当前帧之间的时间(单位为秒),通常用于实现与帧率无关的平滑运动和动画

float speed = 5f;
void Update() => transform.Translate(Vector3.forward * speed * Time.deltaTime);

Time.deltaTime确保无论游戏的帧率是多少,物体的移动速度始终相同

2.Time.time

表示自游戏开始以来经过的时间(单位为秒)

3.Time.timeScale

timeScale是Unity时间系统中一个非常重要的属性。它控制整个游戏的时间流速。默认值是1,表示正常速度。如果将其设置为0,游戏将暂停。如果设置为大于1的值,时间将加速。

4.Time.fixedDeltaTime

Time.deltaTime类似,fixedDeltaTime是每个固定时间步长的时间(单位为秒)。它用于FixedUpdate()方法,确保物理计算在所有帧率下都是一致的,默认值为0.02s,表示每秒更新50次

void FixedUpdate() => transform.Translate(Vector3.forward * speed * Time.fixedDeltaTime);

5.Time.unscaledDeltaTime

类似于Time.deltaTime,但unscaledDeltaTime不会受到Time.timeScale的影响。用于不受时间缩放影响的功能(如UI动画、计时器等)

void Update()
{
    float countdown = 10f;
    countdown -= Time.unscaledDeltaTime; 
}

6.Time.realtimeSinceStartup

返回自游戏启动以来的实际时间(单位为秒),不受timeScale影响

7.Time.smoothDeltaTime

类似于Time.deltaTime,但它提供了更平滑的值,适用于需要更平滑的插值计算的场景。通常在帧率不稳定时,可以使用它来减少跳动

8.Time.captureDeltaTime

captureDeltaTime提供的是实时的时间间隔,而不受Unity内部时间优化的影响。用于精确时间测量

Time API

属性描述
captureDeltaTime通过减慢应用程序的播放时间,使Unity可以在帧之间保存截图。
captureDeltaTimeRational通过减慢应用程序的播放时间,使Unity可以在帧之间保存截图。
captureFramerateTime.captureDeltaTime的倒数。
deltaTime从上一帧到当前帧的时间间隔(单位:秒,只读)。
fixedDeltaTime游戏内物理和其他固定帧率更新(如FixedUpdate)执行的时间间隔(单位:秒)。
fixedTime当前FixedUpdate开始的时间,单位为自游戏开始以来的秒数(只读)。
fixedTimeAsDouble上一次FixedUpdate开始的双精度时间(只读)。这是自游戏开始以来的时间(单位:秒)。
fixedUnscaledDeltaTime时间流速独立的(“真实”)时间间隔,用于物理和其他固定帧率更新(如FixedUpdate)的执行(只读)。
fixedUnscaledTime上一次FixedUpdate阶段开始时的时间,时间流速独立(只读)。这是自游戏开始以来的时间(单位:秒)。
fixedUnscaledTimeAsDouble上一次FixedUpdate阶段开始时的双精度时间,时间流速独立(只读)。这是自游戏开始以来的时间(单位:秒)。
frameCount自游戏开始以来的总帧数(只读)。
inFixedTimeStep如果在固定时间步长回调(如FixedUpdate)中调用,则返回true,否则返回false(只读)。
maximumDeltaTime每帧Time.deltaTime的最大值。限制了两个帧之间Time.time的最大增量,单位为秒。
maximumParticleDeltaTime每帧可用于粒子更新的最大时间。如果一帧时间超过此值,则更新将被分成多个较小的更新。
realtimeSinceStartup自游戏启动以来的真实时间(单位:秒,只读)。
realtimeSinceStartupAsDouble自游戏启动以来的真实时间(单位:秒,只读)。realtimeSinceStartup的双精度版本。
smoothDeltaTime平滑过的Time.deltaTime(只读)。
time当前帧开始时的时间,单位为自应用程序启动以来的秒数(只读)。
timeAsDouble当前帧开始时的双精度时间(只读)。这是自游戏开始以来的时间(单位:秒)。
timeAsRational本帧开始时的时间(只读)。这是自游戏开始以来的时间,表示为RationalTime
timeScale时间流速的比例。
timeSinceLevelLoad自上一个非附加场景加载完成以来的时间(单位:秒,只读)。
timeSinceLevelLoadAsDouble自上一个非附加场景加载完成以来的双精度时间(单位:秒,只读)。
unscaledDeltaTime时间流速独立的,从上一帧到当前帧的时间间隔(单位:秒,只读)。
unscaledTime本帧的时间,时间流速独立(只读)。这是自游戏开始以来的时间(单位:秒)。
unscaledTimeAsDouble本帧的双精度时间,时间流速独立(只读)。这是自游戏开始以来的时间(单位:秒)。

UnityScripting Time