时间缩放状态下,比如 Time.timeScale 缩小为 0 或者 0.000001 等极小值时,若想将特效的播放速度放大相同的倍数,即修改 ParticleSystem.playbackSpeed / Time.timeScale,非循环播放特效仍然无法正常播放(这可能是 Unity5.3.1的问题),依然高速瞬间播完,但是对于无限循环播放类型的特效没有影响,目前解决的方式就是给在时间缩放状态下的特效添加脚本,在 Update 里面,每帧运行 ParticleSystem.Simulate(),参数为:Time.deltaTime 或者 Time.unscaledDeltaTime,识具体情况而定。
此外某些特效在播放一次后设置为非激活状态,再次激活也无法正常播放,也可以使用这个解决方案。
注意:ParticleSystem.Simulate( float t, bool withChildren, bool restart) 这个接口会产生大量的GC,我也是在实际使用中发现;不过有个方法可以在使用时尽量减少GC,就是只在根节点添加这个脚本,同时保证脚本被添加在唯一的特效根节点上,给第二个参数 withChildren 设置为 true;否则每个特效组件都必须添加一个这个脚本并运行 Simulate,查看下 profile 里的 GC,可能一个特效随便每帧产生1-2kb,这个还是很难接受的。