调整Time.timeScale的影响。
1.timeScale不会影响Update和LateUpdate的执行速度。
2.FixedUpdate是根据时间来的,所以timeScale只会影响FixedUpdate的速度。
3.Update和LateUpdate不是不受影响吗?那怎么就暂停游戏了呢?Update和LateUpdate并没有停,依然在渲染,只是你的代码中依赖于Time.deltaTime的逻辑将会被停掉了,因为Time.deltaTime = 0了。所以游戏看起来是被冻结了。
细说
设置 Time.timeScale 为 0 将会暂停所有和帧率无关的事情。这些主要是指所有的物理事件和依赖时间的函数、刚体力和速度等,而且 FixedUpdate 会被暂停(不是Update),因为FixedUpdate函数是根据时间来进行更新的。
但是,Update 函数本身的执行是不会受 Time.timeScale 的影响的。Update 是依赖你的机器的,它的调用次数和你的机器渲染一样快慢(一些特殊情况除外);性能高的机器,帧率高,Update 函数执行次数也就多。因此,当使用 Time.timeScale = 0 时,游戏看起来是被冻结了,这是因为所有和时间有关的事情都被暂停了。但是,我们的游戏仍在渲染,也就是说 Update 函数仍在执行。无论 Time.timeScale 等于多少,Update 和 LateUpdate 都会去执行。所有的动画都是基于时间来的,因为Time.timeScale = 0了,所以 Time.time 也就不会在变化了。当 Time.timeScale 为 0 时,Time.deltaTime 将为 0。这意味着,如果你使用 Time.deltaTime 来控制旋转和位移等,那Time.timeScale = 0 也将使这些物体停止运动。
如果游戏暂停以后想在暂停界面上继续播放一些不受 Time.timeScale 影响的动画,那么我们就需要用到 Time.realtimeSinceStartup。
总结
总之一句话 Time.timeScale

本文详细探讨了Unity中的Time.timeScale如何影响游戏时间,包括它如何暂停物理更新、固定更新以及与Update和LateUpdate的关系。当Time.timeScale设为0时,虽然Update和LateUpdate仍执行,但由于Time.deltaTime变为0,导致与时间相关的动画和运动停止,实现游戏暂停。使用Time.realtimeSinceStartup可在暂停期间维持不受影响的动画。Time.timeScale是调整游戏速度的关键,可用于游戏加速或暂停。
最低0.47元/天 解锁文章
789

被折叠的 条评论
为什么被折叠?



