Движение персонажа и камера
Урок про то, как персонаж двигается и как настроить камеру от третьего лица.
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.
- Штанга подтягивает камеру при столкновении со стеной.