Unity动画篇:解决Unity 状态机Animator鬼畜动画。

状态机的基础知识这里有位老哥讲的非常好https://blog.csdn.net/qq_34134078/article/details/53092653

其实很简单,在逻辑上重置状态机就可以,看代码。

private float v = 0;
private float h = 0;
private Animator m_Animator;

void Start () 
{    
     m_Animator = getComponent<Animator>();     
     //第一个输入储存
     v = Input.GetAxisRaw("Vertical");
     if (v != 0)
         return;
     h = Input.GetAxisRaw("Horizontal");
     if (h != 0)
         return;
}
        
private void FixedUpdate()
{
            if (h != 0)
                m_Animator.SetFloat("Blend", 0);
            if (v != 0)
                m_Animator.SetFloat("DirY", 0);
            h = Input.GetAxisRaw("Horizontal");
            transform.Translate(Vector2.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
            if (h > 0)
            {
                m_Animator.SetFloat("DirX", dir * h);
            }
            else if (h < 0)
            {
                m_Animator.SetFloat("DirX", dir * h);
            }
            v = Input.GetAxisRaw("Vertical");
            transform.Translate(Vector2.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
            if (v > 0)
            {
                m_Animator.SetFloat("DirY", dir * v);
            }
            else if (v < 0)
            {
                m_Animator.SetFloat("DirY", dir * v);
            }

}

其实也可以在中间判定h!=0直接return;可是那样的话,操作的时候总有一种不爽快的感觉,大家可以自己试验一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值