Движение персонажа и камера

Урок про то, как персонаж двигается и как настроить камеру от третьего лица.

Character Movement Component — это компонент, который берёт на себя всю физику передвижения персонажа: ходьбу, прыжки, гравитацию, плавание и полёт.

Готовое движение из коробки

Главное преимущество класса Character — встроенный CharacterMovementComponent. Вам не нужно вручную считать гравитацию или скольжение по склону: достаточно сказать «двигайся в этом направлении», и компонент сделает остальное. Из ввода движения вы получаете вектор направления и передаёте его в Add Movement Input — компонент применит его с учётом скорости, ускорения и трения.

Input Action Move (Axis2D)
     |
[Add Movement Input: Forward Vector * X]
[Add Movement Input: Right Vector   * Y]
     |
CharacterMovementComponent  -- двигает капсулу, считает гравитацию

Настройки движения

ПараметрЧто задаёт
Max Walk SpeedМаксимальная скорость ходьбы
Jump Z VelocityСила прыжка вверх
Gravity ScaleМножитель гравитации
Air ControlУправляемость в воздухе

Камера от третьего лица

Для вида из-за спины используют связку двух компонентов. SpringArm (пружинная штанга) держит камеру на расстоянии от персонажа и автоматически подтягивает её ближе, если между камерой и героем оказывается стена. На конце штанги крепится Camera.

Character
 +-- Capsule (корень)
      +-- Mesh
      +-- SpringArm (длина 300, отодвигает камеру назад)
           +-- Camera

Поворот по мыши

Движение мыши обычно поворачивает либо контроллер (для вида от первого лица), либо штангу камеры. Связав ввод мыши с поворотом, вы получаете осмотр сцены. Часто включают опцию, при которой персонаж поворачивается в сторону движения, а не камеры, — это типично для приключенческих игр от третьего лица.

Как работает под капотом

Каждый кадр CharacterMovementComponent берёт накопленный input vector, рассчитывает желаемое перемещение с учётом ускорения и трения, проверяет коллизии капсулы со сценой (чтобы не пройти сквозь стену) и сдвигает персонажа. Он же определяет, стоит ли персонаж на земле (Movement Mode: Walking) или находится в воздухе (Falling), и применяет гравитацию соответственно.

Частые ошибки

  • Двигать персонажа напрямую через SetActorLocation. Это ломает коллизии и физику; используйте Add Movement Input.
  • Камера сквозь стены. Без SpringArm камера проходит сквозь геометрию; штанга решает это.
  • Путать поворот контроллера и персонажа. От этого зависит, смотрит ли герой туда же, куда камера.

Режимы движения и кастомизация

CharacterMovementComponent знает несколько режимов (Movement Mode): Walking — по земле, Falling — в воздухе (прыжок или падение), Swimming — в воде, Flying — полёт. Переключение между ними обычно происходит автоматически: сошёл с края — стал Falling, вошёл в воду — Swimming. Но режим можно менять и вручную, например давая персонажу временную способность летать. Каждый режим имеет свои параметры: скорость плавания, силу прыжка, управляемость в полёте.

Компонент щедро настраивается, но не всесилен. Нестандартное движение — стены, по которым можно бегать, двойные прыжки, рывки — иногда требует расширения компонента в C++ или дополнительной логики поверх. Тем не менее для подавляющего большинства персонажей встроенных возможностей хватает с запасом, и это огромная экономия по сравнению с написанием физики передвижения с нуля.

Итоги

  • CharacterMovementComponent сам считает гравитацию, ходьбу и прыжки.
  • Движение задают через Add Movement Input, а не прямой телепортацией.
  • Камеру от третьего лица строят на SpringArm + Camera.
  • Штанга подтягивает камеру при столкновении со стеной.
Проверьте себя
1. Как правильно перемещать персонажа Character?
AЧерез SetActorLocation каждый кадр
BЧерез Add Movement Input
CМеняя позицию камеры
DЧерез материал
2. Зачем нужен SpringArm в камере от третьего лица?
AУскоряет игру
BДержит камеру на расстоянии и подтягивает её при столкновении со стеной
CВключает гравитацию
DУправляет вводом
3. Что делает Character Movement Component автоматически?
AРисует интерфейс
BСчитает гравитацию, ходьбу, прыжки и проверку коллизий
CЗагружает уровни
DКомпилирует Blueprint