Unity3D - 動作動畫忽略timeScale
阿新 • • 發佈:2017-07-13
[0 append timescale ret 忽略 void con rac mode
近期在調戰鬥時的動畫與特效。Unity3D對加/減速提供了Time.timeScale支持。可是,timeScale提供的是全局的時間縮放,而我們有些動作或動畫是不希望被timeScale加減速的。比方,《刀塔傳奇》中播放大招時。除了大招特效,全部別的動作/動畫都暫停。
以下各自是Animation、Animator和粒子特效的ignoreTimeScale方法。
Animation
Time.realtimeSinceStartup記錄是不受timeScale影響的真實時間,利用它來在每一幀採樣播放Animation。
代碼片段例如以下:
AnimationState animState = animation[clipName]; // 當前動畫狀態
curTime = Time.realtimeSinceStartup; // 當前真實時間
deltaTime = curTime - lastFrameTime; // 此幀與上一幀的時間間隔
lastFrameTime = curTime; // 記錄此幀時間,下一幀用
progressTime += deltaTime; // 動畫已播放時間
animState.normalizedTime = progressTime / currState.length; // 動畫規範化時間[0-1]
animation.Sample(); // 在當前狀態對動畫進行採樣,當你想顯式設置動畫狀態而且對它取樣的時候使用
Animator
Animator _animator = ...;
public void Update() {
_animator.updateMode = AnimatorUpdateMode.UnscaledTime; // 指定該Animator更新模式為不受scale影響
}
粒子特效
對於ParticleEmitter
ParticleEmitter _emitter = ...;
public void Update() {
_emitter.Simulate(Time.unscaledDeltaTime);
}
對於ParticleSystem
ParticleSystem _particleSystem = ... ;
public void Update() {
_particleSystem.Simulate(Time.unscaledDeltaTime, true, false);
}
Unity3D - 動作動畫忽略timeScale