码迷,mamicode.com
首页 > 其他好文 > 详细

记一次Animator状态快速切换问题的解决

时间:2016-02-17 22:13:31      阅读:536      评论:0      收藏:0      [点我收藏+]

标签:

事情是这样的,我尝试在一帧内多次切换一些状态:

public Animator animator;


void OnEnable()
{
    animator.CrossFade("BeAttack1", 0.2f);
    animator.CrossFade("Idle", 0.2f);
}

 

但结果并非播放Idle,而是播放BeAttack1。

在Animator刷新前,它所播放的是最后一次调用接口的信息,谁排在后执行谁。

并且当一个状态处于过渡时,Animator默认这个状态还没有跳转,只有过渡完成才算跳转到另一个状态(具体看这篇:http://www.cnblogs.com/hont/p/4786462.html)

 

下面这幅图说明了这个问题:

技术分享

 

 

Animation有一个动画队列可以解决这个问题,而Animator取消了动画队列。

而用协程的话又会变得非常麻烦,于是我想到了用Animator.Update来解决:

public static void ForceCrossFade(this Animator animator, string name, float transitionDuration)
{
    animator.Update(0);

    if (animator.GetNextAnimatorStateInfo(0).fullPathHash == 0)
    {
        animator.CrossFade(name, 0.2f);
    }
    else
    {
        animator.Play(animator.GetNextAnimatorStateInfo(0).fullPathHash);
        animator.Update(0);
        animator.CrossFade(name, 0.2f);
    }
}

 

我写了一个CrossFade的扩展,强制调用Update,如果当前没有下一个动画跳转则直接混合,如果有就强制切到跳转然后混合。

调用测试脚本:

void OnEnable()
{
    animator.ForceCrossFade("BeAttack1", 0.2f);
    animator.ForceCrossFade("Idle", 0.2f);
}

 

OK,测试无误,最后又回到了Idle:

技术分享

记一次Animator状态快速切换问题的解决

标签:

原文地址:http://www.cnblogs.com/hont/p/5196485.html

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