前提条件:在项目中用过Time.timeScale = 0来实现游戏暂停
问题: 暂停游戏后,暂停界面的按钮可能需要播放一个idle时的动画,Time.timeScale=0 会影响动画播放。
受Time.timeScale影响的因素:
1.物理模拟. FixedUpdate - 当Time.timeScale=0时,FixedUpdate 函数不会被执行。
2.Coroutines. - Time.timeScale=0 协程函数不会停止,但是会停止WaitForSeconds. 协成函数还是会每一帧都触发,但是WaitForSeconds使用的是当前的Time.deltaTime会变成0
3.Invoke 和 InvokeRepeating. -延迟一段时间后掉用指定函数.
4.Particle System 粒子系统.
5.Animations. -动画. 如果我们使用的是Animator,可以设置动画忽略Time.timeScale带来的影响. 只需要把UpdateMode设置为UnScaled Time,设置如下:
不受 Time.timeScale影响的因素:
1.Update - Time.timeScale不会影响Update的调用,Update会一直被调用。但是如果Time.deltaTime=0,如下实现不会工作:
function Update () { // Move the object 10 meters per second! var translation = Time.deltaTime * 10; transform.Translate (0, 0, translation); }2. OnGUI -OnGui和对应的事件实现原理不基于Time.timeScale,所以也不会受影响。
参考: