Unity 动作动画卡在最后却不结束的问题

个人理解:这种情况是因为,在某个动作的某个帧事件中进行特定的SetBool的操作,但是似乎因为两个动作间的过渡时间过短过长,导致上一个动作未能播放完全(非固定持续时间)就过渡到下一个动作,事件也未执行,如下图:

 

比如我是在移动动作的同时,进行闪避动作,就有小概率人物动作会定格在闪避的最后一帧,同时闪避动作也不会自行结束,因为动画机里设定的Dodge参数始终为True

试了一下处理按键太麻烦,干脆直接加个判断语句,如果人物卡在这个动作一定时间了,那就把这个动作的布尔参数重新设为False,关掉这个动作(实在没办法才如此,一般建议调整过渡时间等)

代码如下:

public class anim : MonoBehaviour
{
    private Animator ani;
    bool isDodge;

    float DodgeTime;//

    void Start()
    {
        ani = GetComponent<Animator>();

    }
    void Update()
    {

        if (Input.GetKeyDown(KeyCode.Space))//按下空格进行闪避
        {
            ani.SetBool("attack", false);

            ani.SetBool("dodge", true);
        }

        if (ani.GetBool("dodge"))//通过动画机内的闪避参数,计算闪避动作的实际进行时间
        {           
            DodgeTime += Time.deltaTime;
            if (DodgeTime >= 0.3)//如果卡在闪避动作超过0.3秒
            {
                ani.SetBool("dodge", false);//那么将闪避参数设为false,结束闪避动作
                Debug.Log("闪避时间为:" + DodgeTime);
                DodgeTime = 0;
            }
        }
    }

    void startDodge()//在闪避动作的“事件”特定时间,添加一个函数以确定闪避开始
    {
        isDodge = true;
        ani.SetBool("attack", false);//防止动作冲突
    }
    void endDodge()//在闪避动作的“事件”特定时间,添加一个函数以确定闪避结束
    {
        isDodge = false;
        DodgeTime = 0;//如果动作正常进行没卡死,那么DodgeTime=0
        ani.SetBool("dodge", false);

    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值