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
我正在开发一个带有动画的简单 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