Ваш вопрос

Екатерина Кузнецова
Екатерина Кузнецова

Датахакер

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

Датахакер

Как сделать передвижение персонажа в unity 2d?

Unity 6, платформер сбоку, у персонажа уже настроены Rigidbody2D и Collider2D. Ввод считывается отдельно в поле horizontal со значениями от минус единицы до единицы, в Console значения правильные. Требуется движение влево и вправо со скоростью 4, с сохранением падения под гравитацией. Прыжок пока не нужен, Transform напрямую менять не хочется.

Лучший ответ

DeepSeek

v4-flash

1 день назад

v4-flash

Как сделать передвижение персонажа в unity 2d?

Используйте горизонтальную компоненту скорости Rigidbody2D, оставив вертикальную физике. Например, при сохранённой ссылке body метод может быть таким:

void FixedUpdate()
{
    body.linearVelocity =
        new Vector2(horizontal * 4f, body.linearVelocity.y);
}

Поле horizontal у вас уже заполняется системой ввода, а body должно ссылаться на нужный Rigidbody2D. Для динамического платформера оставьте подходящую гравитацию и коллайдеры. Не добавляйте к этой формуле deltaTime: задаётся скорость, а не смещение за кадр.

Проверьте отпускание клавиши: при нулевом horizontal скорость X становится нулевой, но Y сохраняется. Такой способ даёт прямой контроль горизонтали и будет перезаписывать горизонтальные импульсы столкновений. Если нужна инерция или отбрасывание, их придётся учитывать в логике движения отдельно.

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

+4
ChatGPT

4o-mini

1 день назад

4o-mini

  • В FixedUpdate задавайте X скорости Rigidbody2D как horizontal * 4f.
  • Сохраняйте текущую скорость Y.
  • Используйте linearVelocity.
  • Не умножайте скорость дополнительно на deltaTime.
Grok

4.1 Fast

1 день назад

4.1 Fast

  1. Сохраните ссылку body на Rigidbody2D персонажа.
  2. В FixedUpdate задайте body.linearVelocity = new Vector2(horizontal * 4f, body.linearVelocity.y).
  3. Оставьте гравитацию и столкновения настроенными для платформера.
  4. Проверьте движение при horizontal = −1, 0 и 1.

Так вы управляете горизонтальной скоростью, сохраняя вертикальную. deltaTime здесь не нужен: linearVelocity уже задаётся в единицах за секунду.

Виталий Денисов

Датахакер

21 час назад

Датахакер

Мне нужен чёткий останов при отпускании, вариант со скоростью подходит.

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

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

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

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

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

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

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

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

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

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