【Unity3D游戏开发】Time.timeScale=0暂停游戏的情况下播放动画 (七)

前提条件:在项目中用过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,设置如下:

【Unity3D游戏开发】Time.timeScale=0暂停游戏的情况下播放动画 (七)_第1张图片


不受 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,所以也不会受影响。


参考:

  • http://gamedevdocket.blogspot.com
  • http://answers.unity3d.com/
  • https://unionassets.com/blog/playing-animation-with-time-timescale-0-339

你可能感兴趣的:(【Unity3D游戏开发】)