码迷,mamicode.com
首页 > 编程语言 > 详细

(转)Unity3D - 动作动画忽略timeScale

时间:2015-07-14 17:15:43      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

转自:http://blog.csdn.net/ynnmnm/article/details/46866347

最近在调战斗时的动画与特效,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

标签:

原文地址:http://www.cnblogs.com/wonderKK/p/4645575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!