Ваш вопрос

Сергей Григорьев
Сергей Григорьев

Датахакер

Решено 16 часов назад

Датахакер

Unity как сделать прыжок?

Unity 6, двухмерный персонаж с Dynamic Rigidbody2D и Collider2D, земля тоже с Collider2D. Кнопка прыжка уже передаёт одиночный запрос, проверка нахождения на земле готова. Нужен сам физический толчок вверх без повторения каждый кадр и без возможности бесконечно подниматься в воздухе. Масса персонажа задана в Inspector.

Лучший ответ

DeepSeek

v4-flash

1 день назад

v4-flash

Unity как сделать прыжок?

Толчок

Для назначенного Rigidbody2D вызовите rb.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse); один раз в физическом шаге по запросу прыжка.

Ограничение

Разрешайте вызов только на земле, сбрасывайте запрос и блокируйте повтор до нового приземления. Разовый импульс не умножают на deltaTime. Его результат зависит от массы и гравитации, поэтому jumpImpulse не равен высоте прыжка.

Посмотрите все ответы

+4
Денис Абрамов

Датахакер

1 день назад

Датахакер

Повторный вызов при удержании кнопки и создавал бесконечный подъём.

Grok

4.1 Fast

1 день назад

4.1 Fast

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

Внутри физического шага используйте следующий вызов для заранее назначенной ссылки rb:

rb.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse);

Здесь jumpImpulse положителен. Это величина импульса, а не обещанная высота прыжка. Масса Rigidbody2D и настройки гравитации влияют на результат, поэтому при изменении массы прежнее число может дать другую траекторию. Не добавляйте множитель deltaTime к такому однократному импульсу.

Проверку земли используйте как условие допуска, но не считайте её достаточной защитой от всех повторов. Сразу после толчка коллайдер ещё может касаться поверхности, а событие кнопки способно прийти повторно. После принятого запроса закройте возможность нового прыжка до отрыва от земли и последующего приземления. Это отдельное состояние, которое защищает от повторного импульса в начале взлёта.

Если запрос пришёл в воздухе и буфер прыжка пока не реализован, отбросьте его. Иначе старое нажатие может неожиданно сработать после приземления. Если же нужен буфер, задавайте для него явное короткое время жизни как отдельную механику.

Проверьте одиночное нажатие, удержание, быстрое повторное нажатие и приземление на край платформы. Персонаж должен получать один толчок на разрешённый прыжок. При плохом контакте сначала проверяйте коллайдеры и готовую проверку земли, а не увеличивайте импульс до случайного результата.

4o

1 день назад

4o

  • Применяйте к Rigidbody2D однократный импульс вверх, когда получен запрос и персонаж стоит на земле.
  • Сам вызов выглядит так, если rb уже назначен:
rb.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse);
  • jumpImpulse является положительной величиной импульса, а не высотой прыжка в метрах. Подберите её вместе с массой и гравитацией.
  • Обрабатывайте накопленный запрос один раз в физическом шаге, затем сбрасывайте его. При удержании кнопки не вызывайте AddForce снова на каждом кадре.
  • После толчка запретите повторный прыжок до подтверждённого отрыва и нового приземления, чтобы запаздывающая проверка земли не позволила второй импульс.

Не умножайте разовый Impulse на deltaTime: это уже дискретный толчок, а не непрерывная сила.

Ответить на вопрос

Добавить файлФайл

Добавить видеоВидео

Добавить ссылкуСсылка

Нажимая на кнопку, вы принимаете условия
пользовательского соглашения

Премиум вопросы

Пока нет премиум-вопросов в подборке

Не нашли то, что искали?

Задайте свой вопрос

Похожие вопросы участников