@Coffee_yechic

Персонаж иногда прыгает на двойную высоту. Как это исправить?

Персонаж рандомно прыгает на двойную высоту, от прописанной.

Написал самый стандартный код для прыжка:
private void Jump() {
        rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}


Также довольно обычный код для проверки земли под ногами:
private void CheckGround() {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 0.3f);

        isGrounded = colliders.Length > 1;
}


Вызов функции прыжка:
private void Update() {
        if (isGrounded && Input.GetButton("Jump")) Jump();
}


Вызов функции проверки земли под ногами:
private void FixedUpdate() {
        CheckGround();
}


Заранее спасибо за помощь.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
@Coffee_yechic Автор вопроса
Я решил эту проблему. Как оказалось, всё было очень просто... Я Вызывал функцию прыжка в Update, что категорически не рекомендуется делать... И вместе с подскоками и просадками фреймрейта персонаж прыгал то выше, то ниже. После того как я перенёс всё движение в FixedUpdate проблема капитулировала.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks Куратор тега C#
Обычно такая ситуация возникает из-за неправильной проверки земли. Например, игрок ещё не упал, а коллайдер уже сработал. Или игрок выстрелил из пистолета, и пуля задетектилась как земля. Или вертикальная стенка попала в коллайдер.

Советую переписать под raycast под ноги. Также проверить, корректно ли работает импульс. Может вашему проекту лучше использовать скорость.
Ответ написан
dollar
@dollar
Делай добро и бросай его в воду.
private void Jump() {
        rigidbody.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}

А теперь сделайте так, чтобы двойной вызов этой функции давал бы то же ускорение, что и единичный вызов. Самое простое - это ограничить ускорение персонажа вверх некой константой. Если ускорение превышает порог, то обрезать до этого значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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