Unity 2D - 从边缘掉落时,掉落动画将不起作用

Unity 2D - falling animation won't work on when falling off of an edge

我正在开发一个带有动画的简单 2D 平台游戏,我设法让动画状态机处理一个问题,下落动画在从边缘掉落时不起作用,它只会被触发跳跃动画后。

private void AnimationState()
    {
        if (state == State.jumping)
        {
            if (rb.velocity.y < .1f)
            {
                state = State.falling;
            }
        }
        else if (state == State.falling)
        {
            if (isGrounded == true)
            {
                state = State.idle;
            }
        }
        else if (state == State.hurt)
        {
            if (Mathf.Abs(rb.velocity.x) < .1f)
            {
                state = State.idle;
            }
        }
        else if (Mathf.Abs(rb.velocity.x) > 2f)
        {
            state = State.running;
        }
        else
        {
            state = State.idle;
        }
    }

如果精灵在X方向减速到2f以下,就会进入空闲状态。那么一旦进入空闲状态,你的逻辑就只能过渡到运行。如果它从边缘掉落,您的代码中没有任何内容可以将其转换为下降状态。

你不应该像这样写状态机,因为有 N 平方排列,你指定从每个状态到每个其他状态的每个可能的转换。相反,您应该在不关心当前状态的情况下识别状态。

例如:

  • 跳跃是velocity.y > 0
  • 下降是 velocity.y < 0
  • FallingFast velocity.y < -0.1(即在此处触发自由落体动画)
  • 伤害是正交的(即与运动状态无关),应该基于碰撞
  • 运行 是 velocity.y == 0 和 abs(velocity.x) > 2
  • 空闲是 velocity.magnitude == 0