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Можно управлять контроллеромМашины, летающие объекты, нестандартное движение
CharacterPawn + готовое движение и анимацииХодячие герои и враги

Как это выглядит в 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, а не в теле.
Проверьте себя
1. Чем Character отличается от обычного Pawn?
AНичем, это синонимы
BCharacter — это Pawn с встроенным движением и анимациями
CCharacter нельзя контролировать
DCharacter — это контроллер
2. Какова роль Controller'а по отношению к Pawn?
AЭто тело в мире
BЭто «мозг», который управляет Pawn'ом
CЭто компонент отрисовки
DЭто уровень
3. Где лучше хранить очки игрока, чтобы они пережили смерть персонажа?
AВ Pawn
BВ Mesh-компоненте
CВ PlayerController или PlayerState
DВ материале