众所周知,每一个游戏都会有自己的时间。这个时间可以是内部,从游戏开始的时间,也可以是外部真实的物理时间,时间相关内容 主要用于游戏中 参与位移计时 时间暂停等。那么我们今天就来看看Unity中和时间相关的内容。
Unity时间功能速查表
类别 | 属性/方法 | 作用 | 受Time.timeScale 影响 | 应用场景 | 示例代码 |
---|---|---|---|---|---|
基础时间 | Time.time | 游戏启动后的累计时间(秒) | 是 | 计时器、技能冷却 | float startTime = Time.time; |
Time.realtimeSinceStartup | 游戏启动后的真实时间(秒) | 否 | 实际游戏时长记录、不受暂停影响的逻辑 | float realTime = Time.realtimeSinceStartup; | |
Time.timeSinceLevelLoad | 当前场景加载后的累计时间(秒) | 是 | 场景事件触发 | if (Time.timeSinceLevelLoad > 10f) { ... } | |
增量时间 | Time.deltaTime | 上一帧到当前帧的时间间隔(秒) | 是 | 平滑运动、动画 | transform.Translate(Vector3.forward * speed * Time.deltaTime); |
Time.unscaledDeltaTime | 上一帧到当前帧的真实时间间隔 | 否 | 游戏暂停时的UI动画 | uiElement.Translate(Vector2.up * speed * Time.unscaledDeltaTime); | |
时间缩放 | Time.timeScale | 全局时间缩放(0=暂停,1=正常,>1=加速) | - | 暂停、慢动作、加速效果 | Time.timeScale = 0; // 暂停游戏 |
固定时间步长 | Time.fixedDeltaTime | 物理更新(FixedUpdate )的时间间隔(默认0.02秒) | 是 | 刚体运动、物理模拟 | rigidbody.AddForce(Vector3.up * force * Time.fixedDeltaTime); |
其他属性 | Time.frameCount | 游戏启动后的总渲染帧数 | 否 | 性能测试、按帧触发逻辑 | if (Time.frameCount % 60 == 0) { ... } // 每秒执行一次 |
Time.maximumDeltaTime | 单帧最大允许时间(避免卡顿导致逻辑错误,默认0.333秒) | - | 极端卡顿保护 | 通过Edit > Project Settings > Time 调整 | |
协程与时间控制 | WaitForSeconds | 协程等待指定时间(受Time.timeScale 影响) | 是 | 受时间缩放的延迟逻辑 | yield return new WaitForSeconds(2f); |
WaitForSecondsRealtime | 协程等待真实时间(不受Time.timeScale 影响) | 否 | 不受暂停影响的延迟逻辑 | yield return new WaitForSecondsRealtime(2f); | |
暂停与恢复 | Time.timeScale = 0 | 暂停游戏逻辑(需额外暂停音频) | - | 游戏暂停菜单 | Time.timeScale = 0; AudioListener.pause = true; |
Time.timeScale = 1 | 恢复游戏逻辑(需恢复音频) | - | 恢复游戏运行 | Time.timeScale = 1; AudioListener.pause = false; |
依次介绍:
一、什么是TimeScale?
Time.timeScale 是 Unity 中一个全局控制游戏时间流速的浮点数值。你可以通过修改它的值,直接改变游戏内时间的流逝速度。说人话,就是倍速,你看视频有倍速选择吧,这个也是。这个就是里面的时间流速,等会我们可以结合着Time.time具体查看。
基本规则
默认值为 1,表示时间正常流逝。
设为 0:游戏时间完全暂停(类似“游戏暂停”效果)。
大于 1(如 2):时间加速(双倍速运行)。
介于 0 和 1(如 0.5):时间减速(慢动作效果)。
使用:
// 暂停游戏
Time.timeScale = 0;
// 恢复游戏
Time.timeScale = 1;
// 慢动作效果(50%速度)
Time.timeScale = 0.5f;
二、基础时间
1、Time.time:
游戏启动后的累计时间(秒)
当我们在Update中打印时间信息时,发现就是游戏开始了多少时间。
Debug.Log(Time.time);
接下来我们改变一下速度看看,可以看到明显快了很多。所以他是受到Time.timeScale影响的
Time.timeScale =2;
Debug.Log(Time.time);
2、Time.realtimeSinceStartup,
游戏启动后的真实时间(秒)。就是游戏一旦开始,就开始计时。
将时间规模调至0后,时间仍在流逝,所以他不受timeScale的影响。
3、Time.timeSinceLevelLoad:
当前场景加载后的累计时间(秒)。简而言之就是从当前场景加载完成后开始计时。
可见其受到timeScale的影响。好的你应该以及知道了,关于timeScale这玩意的作用了,接下来我们不再赘述。
二、增量时间
1、Time.deltaTime:
上一帧到当前帧的时间间隔(秒)。
这个是什么意思呢,意思就是:在游戏中我们的画面都是一帧一帧的拼凑起来的,他不是连续的,之所以我们看着是连续的,是因为其间隔时间很短很短,短倒你无法察觉。一般来说看视频24帧就行。但是,由于你的游戏是和你的设备性能息息相关的,所以帧率是波动的。也就是说一秒你可能跑90帧,别人跑120帧,那么他就可以在这多的30帧打你。但是每一帧的间隔时间你是可以在Unity中自己控制的,为了保证大家的帧率基本差不多,你可以将这个帧间隔时间设大一点,让大家处于同一起跑线。
请看:可以看出并不固定。这就是帧的波动,取决于你的设备性能。下面的时间也是一样,只是不会受到Time.timeScale的影响。
2、Time.unscaledDeltaTime:
上一帧到当前帧的时间间隔(秒)
将timeScale调为0
关于协程的时间相关我们后面学习协程的时候学习,现在先跳过。
三、其他属性
1、Time.fixedDeltaTime
物理更新(FixedUpdate
)的时间间隔(默认0.02秒)
请注意是在FixedUpdate中打印哈,不然你就会一直看到有数值。注意到当我们调成0之后,他就不会在增加次数了,所以他是有影响的。
这个也分为受Time.timeScale影响和不受Time.timeScale影响的Time.fixedUnscaledDeltaTime
2、Time.frameCount
游戏启动后的总渲染帧数 这个就是帧数
3、Time.maximumDeltaTime:
单帧最大允许时间(避免卡顿导致逻辑错误,默认0.333秒)
Time.maximumDeltaTime是 Unity 中一个用于 防止极端卡顿导致逻辑异常 的安全机制。它的核心作用是限制单帧的增量时间(Time.deltaTime
)的最大值,避免因帧率骤降引发游戏逻辑错误(如物体瞬移、物理穿透等)。 就是说当前这一帧解决不了的事情,给下一帧来解决,不要一直停留在原地,因为没有人会一直等你。
四、快捷设置
在Edit ->ProjecSetting->Time下面可以自己设置相关的参数:
1. Fixed Timestep(固定时间步长)
默认值:0.02 秒(对应每秒 50 次物理更新)。
作用:控制物理引擎(FixedUpdate)的更新频率,确保物理模拟的稳定性。
值越小:物理模拟更精确,但 CPU 负担增加(如 0.01 秒对应每秒 100 次更新)。值越大:物理模拟频率降低,可能导致刚体运动不够平滑(如 0.04 秒对应每秒 25 次更新)。
2. Maximum Allowed Timestep(单帧最大允许时间步长)
默认值:0.3333333 秒(约 333 毫秒)。
作用:限制单帧的最大增量时间(Time.deltaTime),防止极端卡顿导致逻辑异常(如物体瞬移)。
工作原理:
当某一帧耗时超过此值时,Unity 会将时间拆分为多个小段(每段不超过该值),并逐段更新逻辑和物理。例如:若一帧耗时 1 秒,且此值设为 0.333
,Unity 会将该帧拆分为 3 次逻辑更新(每次 0.333
秒)和 1 次剩余更新(0.001
秒)。
设置建议:
移动端或性能波动大的平台:保持默认值,避免逻辑失控。高精度物理游戏:可降低至 0.1
秒,但会增加 CPU 负载。
3.Maximum Particle Timestep(粒子系统最大时间步长)
默认值:0.03 秒(30 毫秒)。
作用:限制粒子系统(ParticleSystem)单帧更新的最大时间步长,防止极端卡顿导致粒子效果异常(如粒子突然爆炸或消失)。和上面的最大帧间隔时间类似
工作原理:
若一帧耗时超过此值,粒子系统会按此步长分段更新。例如,一帧耗时 0.1
秒,粒子系统会分 4 次更新(0.03 + 0.03 + 0.03 + 0.01
)。
参数 | 关联对象 | 调整优先级 | 典型场景 |
---|---|---|---|
Fixed Timestep | 物理引擎(刚体) | 高 | 赛车游戏、物理解谜 |
Maximum Allowed Timestep | 游戏逻辑更新 | 中 | 移动端游戏、开放世界 |
Time Scale | 全局时间控制 | 动态调整 | 暂停菜单、慢动作特效 |
Maximum Particle Timestep | 粒子系统 | 低 | 爆炸特效、复杂粒子场景 |
就这样,债见!