Контроллеры в Unreal Engine (UE4, UE5): Player Controller, AI Controller

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы поговорим о загадочных контроллерах в движке Unreal Engine (UE4, UE5): Player Controller и AI Controller.

Unreal Engine controller

Итак, что же это такое? Unreal Engine controller — это субъект, не представленный «физически» в игровом мире, но, в то же время, управляющий игровыми объектами класса Pawn. Или другими дочерними от него классами, например, Character.

Управление объектом возможно только после того, как Controller «овладеет» им либо с помощью специальной Blueprint-функции «Possess», либо же через настройки класса GameMode, либо же через специальные настройки класса самого объекта. Это управление будет продолжаться до тех пор, пока для текущего контроллера не сработает обратная функция «Un Possess» (отказ от управления). Либо же пока он не «овладеет» каким-то другим объектом игрового мира.

Blueprint-функции Possess и Un Possess в Unreal Engine
Blueprint-функции Possess и Un Possess в Unreal Engine

Controller получает уведомления от движка Анрил Энджин о различных событиях, происходящих в игре с Pawn (Character), которыми он управляет. Это позволяет ему реагировать на эти события, перехватывая их и заменяя стандартное поведение управляемого персонажа на другое, заранее определенное разработчиками игры.

По умолчанию у Controller в Unreal Engine может быть только один управляемый персонаж. Это значит, что в каждый момент времени он владеет одним конкретным объектом. Кстати, данное ограничение можно обойти. Но все же создатели игрового движка не рекомендуют это делать и менять их концепцию. Эта же концепция относится и к объекту. В конкретный момент времени у него может быть только один контроллер.

Иерархия классов Controller в Unreal EngineВ UE5 (UE4) применяются два типа Blueprint класса управляющих менеджеров: Player Controller (контроллер игрока) и AI Controller (контроллер искусственного интеллекта). Оба эти класса являются дочерними от базового Controller, который, в свою очередь унаследован от Actor.

Давайте рассмотрим эти классы чуть подробнее.

Player Controller Unreal Engine (UE4, UE5)

Blueprint class PlayerController — это класс-менеджер в Unreal Engine, который обрабатывает ввод данных (Input Action) с клавиатуры, мышки, джойстика от человека-игрока. И на основе этих данных управляет передвижением и поведением персонажа (аватара этого игрока) в игровом мире. Это своеобразный интерфейс между Pawn (Character) и игроком, управляющим этим объектом. По сути, он представляет волю игрока-человека.

При настройке класса PlayerController в блюпринтах следует учитывать, какую функциональность Вы разместите в нем, и какую в классе Pawn (Character).

Идея создателей движка Unreal Engine заключается в том, что Pawn и Player Controller должны работать вместе, дополняя друг друга. Они оба представляют игрока в игре. Pawn — это физический образ персонажа в игровом мире, а Player Controller — его воля. Поэтому, обычно в персонаже (Pawn) описываются его свойства, 3D-модель и анимации, а в контроллере обрабатывается ввод данных (Input Action).

Но несмотря на это, управление персонажем (ввод данных) также можно реализовать и в классе Pawn. Возникает вопрос: зачем тогда нужен PlayerController?

Дело в том, что в игровом мире объекты классов Pawn и Character могут меняться. Например, сначала игрок управляет персонажем (класс Character), который является главным героем. Затем персонаж садится в машину, и игрок начинает управлять объектом класса Pawn — машиной. После этого игрок может переключиться на управление другим персонажем, например, другом того, кто сел в машину. Этот персонаж также будет относиться к классу Character, но уже другому, для второго персонажа.

В подобных ситуациях, если логику управления персонажами описать в классе Pawn, а не в классе управляющего менеджера, то её придётся дублировать во всех объектах, за которых играет игрок. Это не только неудобно, но и неправильно с точки зрения организации кода.

На помощь приходит класс PlayerController в Unreal Engine. Если описать всю логику управления персонажами именно в нём, то не придётся повторять код в разных классах. Когда игрок меняет своего игрового персонажа, нужно лишь переназначить управление у контроллера на другие объекты с помощью Blueprint-функций «Possess» и «Un Possess».

Player Controller — это один из основных компонентов сетевого взаимодействия в многопользовательских играх движка Unreal Engine. Когда в игре участвуют несколько игроков, на сервере создаётся отдельный экземпляр контроллера для каждого из них. Это необходимо для того, чтобы он мог выполнять сетевые функции, связанные с каждым игроком. При этом каждый сетевой клиент получает свой собственный игровой контроллер, который предназначен только для него. Он может использовать его для связи с сервером и взаимодействия с другими игроками.

Настройки Details для PlayerController (class Defaults)

В меню Details содержатся как унаследованные параметры от класса Actor, так и настройки, характерные для разбираемого класса. Параметры для Actor мы уже разбирали в соответствующей статье про класс акторов. Сейчас же сконцентрируемся только на настройках PlayerController.

Настройки Player Controller в меню Details в Unreal Engine
Настройки Player Controller в меню Details в Unreal Engine

Player Controller:

  • Player Camera Manager Class (по умолчанию значение None, при этом используется стандартный класс Engine.PlayerCameraManager). Определяет, какой класс CameraManager будет создан при инициализации Player Controller. Позволяет выбрать свой пользовательский класс Player Camera.
  • Auto Manage Active Camera Target (bool, по умолчанию = True). Автоматический выбор цели для активной камеры. True — разрешить контроллеру управлять целью камеры (обычно это подконтрольный Pawn). False — ручной пользовательский выбор цели для камеры.
  • Smooth Target View Rotation Speed (float, по умолчанию = 20). Скорость плавного вращения прицела.
  • Should Perform Full Tick when Paused (bool, по умолчанию = False). Исполнять ли функцию Tick, когда игра поставлена на паузу.

Cheat Manager:

  • Cheat Class (по умолчанию используется стандартный класс CheatManager). Позволяет выбрать свой пользовательский класс менеджера читов. Cheat Manager выполняет тестирование и отладку кода в Unreal Engine, а также другие необходимые действия, не включаемые в итоговую сборку игры.

Mouse Interface:

  • Show Mouse Cursor (bool, по умолчанию = False). Отображать курсор мыши или нет.
  • Enable Click Events (bool, по умолчанию = False). Генерировать или нет события клика по актору/компоненту.
  • Enable Touch Events (bool, по умолчанию = True). Генерировать или нет события касания по актору/компоненту.
  • Enable Mouse Over Events (bool, по умолчанию = False). Генерировать или нет события наведения курсора мыши на актор/компонент.
  • Enable Touch Over Events (bool, по умолчанию = False). Генерировать или нет события касания с наведением на актор/компонент.
  • Click Event Keys (по умолчанию неактивный, активируется при Enable Click Events = True). Список клавиш для обработки события (по умолчанию левая кнопка мыши).
  • Default Mouse Cursor (по умолчанию Default). Тип курсора мыши.
  • Default Click Trace Channel (по умолчанию Visibility). Канал трассировки по умолчанию, используемый для определения нажатого объекта. Для выбора предлагаются стандартные каналы трассировки (World Static, World Dynamic, Pawn, Visibility, Camera, Physics Body, Vehicle, Destructible).
  • Trace Distance (float, по умолчанию = 100000). Расстояние для трассировки при вычислении событий нажатия.

Game / Feedback:

  • Force Feedback Enabled (bool, по умолчанию = True). Включить принудительную обратную связь.

Controller / Transform:

  • Attach to Pawn (bool, по умолчанию = False). Прикрепить Player Controller к Pawn. True — местоположение контроллера будет соответствовать местоположению подконтрольного ему Pawn. False — местоположение обновляться не будет. При этом, в любом случае, вращение (rotation) будет соответствовать значениям настроек Control Rotation.

AI Controller Unreal Engine (UE4, UE5)

Blueprint class AIController в UE5 (UE4) — это базовый класс-менеджер для Pawn, если разработчиком не подключен иной. Он управляет неигровыми персонажами (NPC) с помощью искусственного интеллекта (ИИ). Задача AI Controller — следить за тем, что происходит вокруг и реагировать на данные, поступающие из игрового мира. В итоге, принимая решения на основе ИИ, управлять NPC без непосредственного участия игрока.

Все реакции искусственного интеллекта на события в игровом мире при этом, естественно, заранее настраиваются разработчиками при помощи специальных AI-инструментов в Unreal Engine:

  • Behavior Tree (дерево поведения ИИ);
  • Pawn Sensing (глаза и слух ИИ);
  • Nav Mesh Bounds Volume (навигация ИИ).

В сетевых играх, в отличии от Player Controller, для безопасности данных AIController существует только на серверах.

Настройки Details для AIController (class Defaults)

В меню Details содержатся как унаследованные параметры от класса Actor, так и настройки, характерные для разбираемого класса AIController. Параметры для Actor мы уже разбирали в соответствующей статье про класс акторов. Сейчас же сконцентрируемся только на настройках AI контроллера в Анрил Энджин.

Настройки AI Controller в меню Details в Unreal Engine
Настройки AI Controller в меню Details в Unreal Engine

AI:

  • Start AILogic on Possess (bool, по умолчанию = False). Запуск логики ИИ, когда Pawn находится под управлением AI Controller. True — логика ИИ запускается сразу. False (по умолчанию) — логика ИИ остается не запущенной.
  • Stop AILogic on Unposses (bool, по умолчанию = True). Остановка логики ИИ, когда AI Controller перестал управлять Pawn. True (по умолчанию) — логика ИИ останавливается сразу. False — логика ИИ не останавливается и продолжает действовать.
  • Skip Extra LOSChecks (bool, по умолчанию = True). Игнорировать дополнительные проверки трассировки линии видимости (до крайних точек проверяемой цели).
  • Allow Strafe (bool, по умолчанию = False). Разрешить стрейфинг. В видеоиграх стрейф — это движение, при котором персонаж или объект перемещаются вбок относительно направления движения.
  • Wants Player State (bool, по умолчанию = False). Указывает, использует ли данный ИИ собственный класс PlayerState.
  • Set control Rotation from Pawn Orientation (bool, по умолчанию = True). При отсутствии фокусировки установить поворот (Control Rotation) в зависимости от ориентации Pawn.
  • Default Navigation Filter Class (по умолчанию None). Выбор класса фильтра навигации.

Component Tick:

  • Start with Tick Enabled (bool, по умолчанию = True). Начать работу контроллера с включенным событием Event Tick (Tick также можно включить/выключить позже из кода Blueprint).
  • Tick Interval (float, по умолчанию 0,0 сек). Частота срабатывания Event Tick (в секундах). Если значение отрицательное или равно 0, то Tick срабатывает каждый кадр.

Component Tick / Advanced:

  • Tick Even when Paused (bool, по умолчанию = False). Включить срабатывание Event Tick, когда игра стоит на паузе.
  • Allow Tick on Dedicated Server (bool, по умолчанию = True). Разрешить работу Event Tick на выделенном сервере.
  • Tick Group (по умолчанию During Physics). Определяет группу порядка срабатывания Tick при обновлении кадра. Возможные варианты групп: Pre Physics (перед симуляцией физики), During Physics (во время симуляции физики), Post Physics (после симуляции физики), Post Update Work (после работы).

Tags:

  • Component Tags. Массив тэгов для группировки и категоризации в Unreal Engine. Доступ к ним также можно получить из кода Blueprint.

Component Replication:

  • Component Replication (bool, по умолчанию = False). Включить репликацию в мультиплеерных играх.

Activation:

  • Auto Activate (bool, по умолчанию = True). Включить автоматическую активацию контроллера.

Variable:

  • Editable when Inherited (bool, по умолчанию = True). Включить возможность редактирования при наследовании.

Controller / Transform:

  • Attach to Pawn (bool, по умолчанию = False). Прикрепить контроллер к Pawn. True — местоположение контроллера будет соответствовать местоположению подконтрольного ему Pawn. False — местоположение обновляться не будет. При этом, в любом случае, вращение (rotation) будет соответствовать значениям настроек Control Rotation.

Asset User Data / Advanced:

  • Asset User Data. Массив пользовательских данных.
  • Asset User Data Editor Only. Массив пользовательских данных, используемых только в редакторе.

Navigation / Advanced:

  • Can Ever Affect Navigation (bool, по умолчанию = False). Включить возможность изменять навигацию.

На этом наша статья заканчивается. Мы рассмотрели контроллеры в Unreal Engine, а именно Player Controller и AI Controller. Узнали, как они работают, и ознакомились с их настройками класса по умолчанию, которые можно найти во вкладках Details.

Оцените статью
( 4 оценки, среднее 5 из 5 )
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.