Unity3D - 动作动画忽略timeScale

Posted wzzkaifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D - 动作动画忽略timeScale相关的知识,希望对你有一定的参考价值。

近期在调战斗时的动画与特效。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的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D中暂停时的动画及粒子效果实现

Unity3D的Time.timeScale

Unity3d游戏开发Unity中的Time.timeScale

Unity3D 之暂停和继续的实现

Unity3D 敌人AI 和 动画( Animator )系统的实例讲解

请问如何在3dmax中设计人物动作的名称,如run,walk,我想在unity3d中调用。