Unity 2D - анимация падения не будет работать при падении с края - PullRequest
0 голосов
/ 03 апреля 2020

Я работаю над простым 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;
        }
    }

1 Ответ

0 голосов
/ 04 апреля 2020

Если спрайт замедляется ниже 2f в направлении X, он перейдет в состояние ожидания. Тогда, находясь в состоянии ожидания, ваш лог c сможет только перейти в рабочий режим. Если он падает от края, в вашем коде нет ничего, чтобы перевести его в падающее состояние.

Вы не должны писать конечный автомат так, как вы указываете каждый возможный переход из каждого состояния в другое состояние как Есть N квадратов перестановок. Вместо этого вы должны определить состояние, не обращая внимания на текущее состояние.

Например:

  • Прыжок - это скорость. Y> 0
  • Падение - это скорость. y <0 </li>
  • FallingFast - это speed.y <-0.1 (т. е. здесь запускается анимация свободного падения) </li>
  • Вред ортогональн (то есть не связан с состоянием движения) и должен основываться на столкновении.
  • Бег - скорость.y == 0, а abs (скорость.х)> 2
  • Бездействие - скорость.магнитность == 0
...