@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();
}


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

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

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

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

Войти через центр авторизации
Похожие вопросы