Pawn, Character и управление игроком
Урок разбирает Pawn и Character — специальные виды Actor'ов, которыми можно управлять, и роль Controller'а.
Pawn — это Actor, которым может управлять игрок или ИИ; Character — это готовый Pawn для человекоподобных персонажей с встроенным движением.
Зачем разделять Actor и Pawn
Не всем объектам нужно, чтобы ими управляли. Стена просто стоит — она обычный Actor. А вот игрок, машина или враг должны принимать команды. Для этого в Unreal есть Pawn — Actor, который умеет быть «вселённым» (possessed) контроллером. Контроллер — это отдельная сущность, которая отдаёт команды Pawn'у. Игроком управляет PlayerController, врагом — AIController.
Связка Controller и Pawn
Разделение управления и тела — важная идея. Pawn — это «тело» в мире, Controller — «мозг», который им управляет. Это позволяет, например, переключать управление между разными телами или дать одному и тому же телу то игрока, то ИИ.
PlayerController --possess--> Pawn (тело игрока) AIController --possess--> Pawn (тело врага) Контроллер: принимает ввод/решения Pawn: существует в мире, имеет коллизию и меш
Character — частный случай Pawn
Делать ходячего персонажа с нуля на голом Pawn тяжело: нужно самому считать гравитацию, прыжки, движение по ступенькам. Поэтому Unreal даёт Character — это Pawn, в который уже встроены капсульная коллизия, компонент движения (Character Movement) и поддержка анимаций. Большинство человекоподобных героев делают именно на Character.
| Класс | Что умеет | Когда брать |
| Actor | Просто существует на сцене | Декорации, предметы |
| Pawn | Можно управлять контроллером | Машины, летающие объекты, нестандартное движение |
| Character | Pawn + готовое движение и анимации | Ходячие герои и враги |
Как это выглядит в C++
UCLASS()
class AHeroCharacter : public ACharacter
{
GENERATED_BODY()
public:
AHeroCharacter();
protected:
virtual void BeginPlay() override;
};Как работает под капотом
Когда игра стартует, GameMode (о нём — отдельный урок) создаёт PlayerController и спавнит для него Pawn, после чего контроллер «вселяется» в этот Pawn. С этого момента ввод игрока идёт через контроллер и преобразуется в действия Pawn'а. У Character внутри работает CharacterMovementComponent — он каждый кадр считает физику передвижения: ускорение, трение, гравитацию, прыжок.
Частые ошибки
- Путать Controller и Pawn. Controller — мозг, Pawn — тело. Ввод обрабатывает связка, но команды отдаёт контроллер.
- Делать ходячего героя на Pawn. Для человекоподобного персонажа почти всегда правильнее Character.
- Хранить данные игрока в Pawn, который умирает. Очки и прогресс лучше держать в PlayerController или PlayerState, переживающих смерть тела.
Possess и смена тела
Ключевое действие в связке контроллера и тела — Possess, «вселение». Когда контроллер вселяется в Pawn, он начинает им управлять; при Unpossess связь рвётся. Это открывает интересные сценарии. Игра может позволить игроку пересесть из персонажа в машину: PlayerController отпускает тело героя и вселяется в Pawn автомобиля. Или в стратегии один контроллер по очереди управляет разными юнитами. Тело и мозг живут отдельно именно ради такой гибкости.
Этот же механизм объясняет, почему врага и игрока можно сделать на одном и том же классе Pawn. Разница лишь в том, какой контроллер в него вселился: AIController сделает его управляемым деревом поведения, а PlayerController отдаст управление человеку. Один и тот же «костюм» носят и игрок, и компьютер — меняется только тот, кто внутри.
Итоги
- Pawn — управляемый Actor, Character — Pawn с готовым движением.
- Controller — «мозг», Pawn — «тело»; PlayerController для игрока, AIController для ИИ.
- Для ходячих героев берут Character с его CharacterMovementComponent.
- Долгоживущие данные хранят в контроллере или PlayerState, а не в теле.