1. 程式人生 > >Unity3D - 動作動畫忽略timeScale

Unity3D - 動作動畫忽略timeScale

[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