Задать вопрос
@FaulerAffe
-

Как различать прыжок и падение?

Мне нужно различать, прыгнул персонаж (по кнопке "W") или начал падать (например, сойдя с уступа). У меня есть анимация прыжка, в которую переходит персонаж, как только он перестаёт находиться на земле (используется переменная IsJumping). Персонаж должен менять анимацию, как только он начнёт находиться на земле. Вот, как это выглядит сейчас:
//Код ниже находится в методе Update()
        if (Input.GetKeyDown(KeyCode.W) && IsGrounded())
        {
            playerRigidBody.AddForce(new Vector2(0, jumpImpulse), ForceMode2D.Impulse);
        }
        playerAnimator.SetBool("IsJumping", !IsGrounded());

Я думаю, что тут видно, что никакой проверки на падение нет. Я пытался сделать нечто такое:
//Код ниже находится в методе Update()
        if (IsGrounded())
        {
            jumpState = false;
        }
        if (Input.GetKeyDown(KeyCode.W) && IsGrounded())
        {
            playerRigidBody.AddForce(new Vector2(0, jumpImpulse), ForceMode2D.Impulse);
            jumpState = true;
        }
        playerAnimator.SetBool("IsJumping", jumpState);

По задумке после нажатия на W переменная jumpState обращается в true, персонаж начинает прыгать. Как только персонаж касается земли, срабатывает первое условие и анимация прерывается. На деле персонаж начинает прыгать, но на следующем кадре он ещё на земле (не мгновенно же всё происходит), в итоге анимация на следующем же кадре прерывается. Я пробовал использовать FixedUpdate для обновления jumpState, это не помогло. Что можно сделать в моём случае?
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zukrac
используй еще и вертикальную скорость, что для переменной состояния, что для анимации.
Идёт вверх - прыгает.
Разогнался вниз - точно падает. Ещё можно добавить переменную "сам ли нажал прыжок", если надо именно это.
  • isGrounded
  • velocity.y - для различия фазы прыжка (мощно идёт вверх, или гордо падает)
  • isManuallyJumped - нажимал ли кнопку

isSluchainoFalling = !isGrounded && !isManuallyJumped && (velocity.y < -someFallingVelocity)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы