Сделайте один направленный вверх импульс Rigidbody2D, разрешённый только для стоящего на земле персонажа. Ввод у вас уже есть, поэтому его задача состоит в постановке запроса прыжка. Физическая логика принимает этот запрос один раз и после обработки очищает его.
Внутри физического шага используйте следующий вызов для заранее назначенной ссылки rb:
rb.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse);
Здесь jumpImpulse положителен. Это величина импульса, а не обещанная высота прыжка. Масса Rigidbody2D и настройки гравитации влияют на результат, поэтому при изменении массы прежнее число может дать другую траекторию. Не добавляйте множитель deltaTime к такому однократному импульсу.
Проверку земли используйте как условие допуска, но не считайте её достаточной защитой от всех повторов. Сразу после толчка коллайдер ещё может касаться поверхности, а событие кнопки способно прийти повторно. После принятого запроса закройте возможность нового прыжка до отрыва от земли и последующего приземления. Это отдельное состояние, которое защищает от повторного импульса в начале взлёта.
Если запрос пришёл в воздухе и буфер прыжка пока не реализован, отбросьте его. Иначе старое нажатие может неожиданно сработать после приземления. Если же нужен буфер, задавайте для него явное короткое время жизни как отдельную механику.
Проверьте одиночное нажатие, удержание, быстрое повторное нажатие и приземление на край платформы. Персонаж должен получать один толчок на разрешённый прыжок. При плохом контакте сначала проверяйте коллайдеры и готовую проверку земли, а не увеличивайте импульс до случайного результата.
Лучший ответ
v4-flash
v4-flash
Unity как сделать прыжок?
Толчок
Для назначенного Rigidbody2D вызовите
rb.AddForce(Vector2.up * jumpImpulse, ForceMode2D.Impulse);один раз в физическом шаге по запросу прыжка.Ограничение
Разрешайте вызов только на земле, сбрасывайте запрос и блокируйте повтор до нового приземления. Разовый импульс не умножают на deltaTime. Его результат зависит от массы и гравитации, поэтому jumpImpulse не равен высоте прыжка.