我使用了一些来自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);
}
}
- 我已经在动画编辑器中检查了退出时间。-我已经将所有动画设置为“循环时间”。
1条答案
按热度按时间4ktjp1zp1#
使用
anim.SetTrigger("ParameterName")
而不是anim.SetInteger()
可能更好,只需调用anim.ResetTrigger("ParameterName")
即可停止当前动画,然后开始一个新动画。此外,可能导致您的问题的原因是您对所有动画使用相同的“状态”参数。
如果您可以发布包含您创建的所有参数的Animator屏幕截图,这将很有帮助。