unity3d 运行动画几秒钟后冻结,Unity

f45qwnt8  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(119)

我使用了一些来自mixamo的动画,并成功地将它们实现到了unity animator中,在那里我设置了所有不同的状态。当我从空闲状态进入运行状态时,出现了一个问题。运行中的动画在几秒钟内是活动的,但随后它就冻结了,直到我停止角色,然后它返回到空闲状态。有人知道它可能来自哪里吗?:)
以下是Move函数和代码中不同状态的函数。

private void Move()
    {

        float moveZ = Input.GetAxis("Vertical");
        float moveX = Input.GetAxis("Horizontal");

        moveDirection = new Vector3(moveX, 0, moveZ);
        moveDirection = transform.TransformDirection(moveDirection);
        

       

        if (moveDirection != Vector3.zero && !Input.GetKey(KeyCode.LeftShift))
        {
            Walk();
        }

        else if (moveDirection != Vector3.zero && Input.GetKey(KeyCode.LeftShift))
        {
            //  Debug.Log("Pressed shift");
            Run();
           
        }
        
        else if (Input.GetKeyDown("space"))
        {
            Jump();
        }
        
        else if (moveDirection == Vector3.zero)
        {
            Idle();
        }

        moveDirection *= moveSpeed;
        controller.Move(moveDirection * Time.deltaTime);
      
    }

  
    private void Idle()
    {
       anim.SetInteger("state", 0);
    }

    private void Walk()
    {
        moveSpeed = walkSpeed;
        anim.SetInteger("state", 1);
    }

    private void Jump()
    {
       
        anim.SetInteger("state", 2);
    }

    private void Run()
    {
        moveSpeed = runSpeed;
        anim.SetInteger("state", 3);
    }

}
  • 我已经在动画编辑器中检查了退出时间。-我已经将所有动画设置为“循环时间”。
4ktjp1zp

4ktjp1zp1#

使用anim.SetTrigger("ParameterName")而不是anim.SetInteger()可能更好,只需调用anim.ResetTrigger("ParameterName")即可停止当前动画,然后开始一个新动画。
此外,可能导致您的问题的原因是您对所有动画使用相同的“状态”参数。
如果您可以发布包含您创建的所有参数的Animator屏幕截图,这将很有帮助。

相关问题