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);

    }

猜你喜欢

转载自blog.csdn.net/qianhang120/article/details/126939720