Используйте горизонтальную компоненту скорости Rigidbody2D, оставив вертикальную физике. Например, при сохранённой ссылке body метод может быть таким:
void FixedUpdate()
{
body.linearVelocity =
new Vector2(horizontal * 4f, body.linearVelocity.y);
}
Поле horizontal у вас уже заполняется системой ввода, а body должно ссылаться на нужный Rigidbody2D. Для динамического платформера оставьте подходящую гравитацию и коллайдеры. Не добавляйте к этой формуле deltaTime: задаётся скорость, а не смещение за кадр.
Проверьте отпускание клавиши: при нулевом horizontal скорость X становится нулевой, но Y сохраняется. Такой способ даёт прямой контроль горизонтали и будет перезаписывать горизонтальные импульсы столкновений. Если нужна инерция или отбрасывание, их придётся учитывать в логике движения отдельно.
Лучший ответ
Датахакер
Датахакер
Как сделать передвижение персонажа в unity 2d?
Мне нужен чёткий останов при отпускании, вариант со скоростью подходит.