Pawn в Unreal Engine — разбираем класс Пешки

Друзья, приветствую, с Вами Будуев Антон. В этой статье мы обсудим класс Pawn в Unreal Engine (UE4, UE5) или, как его еще называют по-русски, Павн, Пон или Пешка.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Unreal Engine Pawn

В Unreal Engine класс Pawn представляет собой основу для создания управляемых игровых объектов, которые могут контролироваться как игроком, так и искусственным интеллектом (ИИ). Это базовый класс для всего, что ходит, бегает, прыгает, ездит, плавает, летает и так далее.

Pawn (пешка) — это подкласс ActorPawn (Пешка) — это Актор, которым можно управлять (через контроллер). Он может быть как под управлением игрока (Player Controller), так и под управлением ИИ (AI Controller). Стоит отметить, что по умолчанию Pawn не отвечает за логику управления. Он лишь предоставляет возможность управлять собой. Как правило, логика управления лежит на контроллере. Основная задача Pawn — служить контролируемым телом для контроллера.

Класс Pawn в Unreal Engine
Класс Pawn в Unreal Engine

Перевод официальной справки: Pawn — это базовый класс всех Акторов, которые могут быть захвачены (Possessed) игроками или ИИ. Они являются физическими представлениями игроков и существ на уровне.

Жизненный цикл объекта класса Pawn начинается с его появления в игровом мире — это может произойти как при загрузке уровня, так и динамически, например, при спавне нового персонажа или объекта. После создания Пешка захватывается контроллером: если это персонаж игрока, управление получает Player Controller, если это бот — AI Controller. С этого момента контроллер становится мозгом Pawn, отвечая за приём и обработку пользовательского ввода (Input Vector) или выполнение логики искусственного интеллекта. Все команды, такие как движение, атака или взаимодействие с объектами, проходят через контроллер и реализуются на уровне Pawn с помощью компонентов движения и других систем.

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

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

Основная функциональность класса Pawn

  • Possessed — объект класса Пешки может быть захвачен (Possessed) контроллером (Controller): либо игроком (Player Controller), либо ИИ (AI Controller). Это позволяет управлять объектом Пешки.
  • Input Vector — Пешка может получать, аккумулировать и сохранять ввод (Input Vector) от контроллера. Этот ввод передается компоненту движения, который, в свою очередь, уже преобразует его в различные виды движения.
  • Pawn Movement ComponentPawn может иметь компонент движения (Pawn Movement Component, Floating Pawn Movement, Character Movement), который обрабатывает перемещение Пешки (в большинстве случаев создаёт движение для корневого компонента Пешки).
  • Controller Rotation — объект Пешки может синхронизировать своё вращение с вращением контроллера.
  • Player State Reference — если Пешка находится под управлением игрока, в нём сохраняется ссылка на связанный объект Player State (состояние игрока), который реплицируется и используется для хранения информации об игроке в сетевой игре.
  • Replication Property — сам Pawn и его базовые параметры (например, Controller, Player State, Remote View Pitch) могут быть автоматически реплицированы (синхронизированы) в сетевой игре, но все дополнительные пользовательские переменные и компоненты требуют отдельной настройки.
  • Navigation — класс Пешки реализует интерфейс Nav Agent Interface, что позволяет объекту Пешки взаимодействовать с системой навигации. Через этот интерфейс движок узнаёт, как учитывать Pawn при построении и обновлении навигационной сетки, а также как определять свойства навигационного агента (размер, радиус, высота и т.д.).

Наследование классов

Родительские классы и интерфейсы

Класс Pawn наследуется от класса Actor (базовый класс для объектов, размещаемых на игровом уровне), расширяя его базовую логику функционалом, позволяющим объекту, размещённому в мире, быть под управлением контроллера, сохранять ввод от контроллера и далее передавать его компонентам движения, которые, в свою очередь, преобразуют ввод в конкретный вид движения данного объекта.

Класс Pawn наследуется от класса Actor, расширяя его функциональностью объекта, управляемого контроллером
Класс Pawn наследуется от класса Actor, расширяя его функциональностью объекта, управляемого контроллером

Помимо базового родительского класса Actor, Pawn также наследует интерфейс INavAgentInterface.

Nav Agent Interface — интерфейс, используемый объектами, которые представляют собой агентов навигации (персонажи, перемещающиеся по навигационной сетке). Он предоставляет навигационной системе необходимую информацию о свойствах агента, его местоположении и параметрах для проверки достижения цели.

Дочерние классы

Default Pawn

Default PawnDefault Pawn — это готовый к использованию базовый класс для создания летающих персонажей (например, простого летающего дрона). Класс предоставляет базовую функциональность для перемещения в трехмерном пространстве.

В целом, он мало чем отличается от базового родительского Pawn: если базовый класс Пешки просто связывает создаваемый объект с управляющим контроллером, то дочерний Default Pawn содержит дополнительные компоненты и функции, предоставляя разработчику более удобный и подготовленный вариант управляемого контроллером объекта.

А именно, класс Default Pawn в UE5 (UE4) содержит:

  • компонент Movement Component, обеспечивающий базовое движение объекта. На самом деле, этот компонент представляет не что иное, как Floating Pawn Movement, упрощённый компонент движения для плавного перемещения в воздухе или воде без сложной физики и без учёта гравитации, включающий в себя базовые настройки этого передвижения, такие как MaxSpeed, Acceleration, Deceleration и ряд других;
  • минимальную коллизию, в виде компонента Collision Component, обеспечивающий взаимодействие с миром, который, опять же, представляет не что иное, как компонент Sphere Collision (коллизию в виде сферы).
  • и компонент Mesh Component, отвечающий за отображение 3D-модели в игровом пространстве, который представляет не что иное, как стандартный компонент статического меша Static Mesh Component.

Spectator Pawn

Spectator PawnКласс Spectator Pawn является подклассом Default Pawn. Ещё его называют «Зритель» или «Наблюдатель. В целом, это тот же Default Pawn, с теми же компонентами коллизии и передвижения, но только без компонента Mesh.

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

Character

CharacterCharacter является подклассом Pawn с добавлением компонентов Character Movement Component, Capsule Component и Skeletal Mesh Component. Данный подкласс предназначен для вертикально-ориентированного представления игрока (в основном двуногого персонажа), который может ходить, бегать, прыгать, летать и плавать по миру.

Класс Character является основным для создания человеческих персонажей. Более детально мы его рассмотрим в отдельной статье.

Pawn и Controller

Связь между Pawn и контроллером реализована через внутреннее свойство Controller, в котором хранится ссылка на управляющий в данный момент Пешкой контроллер. Однако в любой момент времени Pawn может находиться как под управлением контроллера, так и без него.

Автоматическое назначение контроллера Pawn при создании или запуске уровня регулируется настройками Auto Possess Player и Auto Possess AI в меню Details. Если в параметрах Pawn указано, что он должен быть захвачен игроком (Auto Possess Player), то при старте уровня соответствующий Player Controller получит управление этой Пешкой. Если же включён параметр Auto Possess AI и задан класс AI Controller, Pawn будет автоматически захвачен ИИ-контроллером. Если оба параметра отключены или не настроены, Пешка останется без контроллера до тех пор, пока его не захватит контроллер вручную с помощью метода Possess.

В любой момент времени контроллер может смениться: например, Player Controller может захватить Pawn, вызвав функцию Possess. До этого Пешка может находиться под управлением AI Controller или быть вообще без контроллера. После вызова функции Un Possess Пешка снова становится свободной и может быть вновь захвачена другим контроллером, если это предусмотрено логикой игры или настройками.

Между Pawn и контроллером существует отношение «один к одному»: один контроллер может управлять только одним Pawn одновременно, и один Pawn может быть захвачен только одним контроллером. Однако Пешка может существовать и без контроллера, если автоматическое управление отключено или контроллер был отсоединён.

При создании сетевой игры важно понимать, что Player Controller не реплицируются на всех клиентов. Вместо этого для передачи информации о владельце Pawn используется реплицируемый объект Player State, ссылка на который всегда имеется в переменных Pawn.

Таким образом, поведение Pawn в отношении контроллеров полностью определяется его настройками и вызовами функций Possess / Un Possess, а также логикой, реализованной в контроллерах. Пешка может быть захвачена либо игроком, либо ИИ, либо же оставаться без управления до тех пор, пока не будет назначен соответствующий контроллер.

Переменная Player State в классе Pawn

Переменная Player State в классе Pawn
Переменная Player State в классе Pawn

В классе Pawn предусмотрена специальная переменная Player State, которая служит для хранения ссылки на объект состояния игрока (Player State). Переменная становится актуальной, когда Pawn захвачен контроллером игрока. В сетевой игре Player State играет ключевую роль, поскольку объекты контроллеров, такие как Player Controller, не реплицируются на все клиентские машины. Но благодаря репликации Player State эта информация становится доступной на всех клиентах и сервере.

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

Таким образом, Player State становится основным способом передачи и синхронизации информации о владельце Pawn между сервером и всеми клиентами. Этот механизм обеспечивает корректную работу мультиплеера и позволяет всем участникам видеть в игре актуальные данные о каждом Pawn, управляемым игроком.

Передвижение объекта класса Pawn

По умолчанию Pawn в Unreal Engine не содержит встроенной логики для передвижения. В данном классе нет собственных методов или компонентов, которые бы автоматически реализовывали движение объекта по входным сигналам. Pawn лишь предоставляет базовую структуру для связи с контроллером (игрока или ИИ), но не реализует само перемещение.

Чтобы реализовать движение для объекта Пешки, необходимо соответствующую логику добавлять вручную. Только в этом случае Pawn сможет реагировать на команды контроллера и перемещаться по игровому миру. Это можно сделать двумя основными способами:

  1. Простое перемещение объекта через соответствующие функции: положение Pawn можно изменять напрямую с помощью таких функций, как Add Actor World Offset или Set Actor Location. Эти методы позволяют просто смещать объект или задавать ему новые координаты в пространстве с учётом коллизий, но всю логику расчёта перемещения (например, обработку скорости, ускорения) необходимо реализовывать самостоятельно.
  2. Использование компонентов движения: более удобный и гибкий способ — добавить к Pawn специальный компонент, например, Floating Pawn Movement. Такой компонент берёт на себя обработку скорости, ускорения и торможения, позволяя реализовать классическое движение без необходимости вручную рассчитывать каждое смещение.

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

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

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

Настройки Details класса Pawn (class Defaults)
Настройки Details класса Pawn (class Defaults)
  • Use Controller Rotation Pitch (bool, по умолчанию False) — включить повтор наклона Пешки (Pitch) в соответствии с наклоном Player Controller (действует, если Пешкой владеет контроллер игрока). Используется для реализации поведения, когда объект или камера должны всегда смотреть туда же, куда и игрок по вертикали.
  • Use Controller Rotation Yaw (bool, по умолчанию False) — включить повтор поворота Пешки (Yaw) в соответствии с поворотом Player Controller (действует, если Пешкой владеет контроллер игрока). Используется для реализации поведения, когда объект или персонаж должен всегда быть ориентирован по горизонтали так же, как и контроллер игрока.
  • Use Controller Rotation Roll (bool, по умолчанию False) — включить повтор крена Пешки (Roll) в соответствии с креном Player Controller (действует, если Пешкой владеет контроллер игрока). Используется для объектов, где требуется синхронизация крена между Pawn и контроллером, например, для летательных аппаратов или специализированных камер.
  • Can Affect Navigation Generation (bool, по умолчанию False) — включить влияние объекта Pawn на генерацию навигационной сетки. Если False — влияние самого объекта на генерацию выключено, но компоненты этого объекта по-прежнему будут влиять на данную генерацию.
  • Auto Possess Player — опция определяет какой Player Controller автоматически овладеет текущей Пешкой при старте её работы на игровом уровне. По умолчанию опция отключена (Disabled).
  • Auto Possess AI — опция определяет время, когда AI Controller овладеет текущей Пешкой (если Auto Possess PlayerDisabled). На выбор представлено 4 варианта:
    • Disabled: авто овладевание полностью выключено;
    • Placed in World: авто овладевание происходит только при ручном помещении Pawn в игровой мир в Unreal Editor;
    • Spawned: авто овладевание происходит только при спавне Пешки через код во время игры;
    • Placed in World or Spawned: авто овладевание происходит всегда, и при ручном размещении объекта, и при его спавне.
  • AI Controller Class — опция определяет, какой класс AI Controller будет использоваться для управления этим Pawn, если Pawn должен быть захвачен искусственным интеллектом. Работает только в связке с Auto Possess AI и игнорируется, если Pawn захватывается игроком через Auto Possess Player.
  • Override Input Component Class — опция позволяет переопределить используемый компонент ввода (Input Component) для данного Pawn. Если свойство задано, будет создан указанный класс компонента ввода вместо стандартного (Default Input Component Class), определённого в настройках проекта. Это даёт гибкость при реализации уникальных схем управления для разных Pawn.
  • Base Eye Height — опция определяет базовую высоту глаз Pawn относительно центра его коллизии. Используется для расчёта положения глаз/камеры и влияет на восприятие мира как игроком, так и AI.

Практика в Unreal Engine: создание базового передвижения объекта класса Pawn. Функция Set Actor Location

Цель данной практики — воочию посмотреть, что объекты Pawn действительно привязываются к контроллеру, когда он начинает владеть ими, и получают управление от него (Input-сигналы от игрока). А также на примере разобрать принципы создания базового движения Pawn при помощи функции Set Actor Location, которая способна задавать новые координаты объекту.

Саму практику мы будем реализовывать в стандартном шаблоне проекта игры Unreal Engine (UE5) от первого лица.

Объект класса Pawn

  1. Через меню Blueprint class в Content Browser создадим Blueprint класса Pawn. Назначим ему имя BP_Pawn и разместим его на игровом уровне.
  2. Для визуализации данного объекта добавим ему Mesh в виде сферы. Для этого в разделе компонентов выберем компонент Sphere и перенесем его в корневой root-уровень, кликнув по компоненту Sphere левой клавишей мыши и не отпуская перенеся его на элемент DefaultSceneRoot. Эту операцию сделать нужно обязательно, чтобы коллизия компонента Sphere учитывалась, как коллизия всего Актора.
Компонент Sphere в BP_Pawn
Компонент Sphere в BP_Pawn

Pawn и Player Controller

  1. Перейдем во вкладку Event Graph и разместим в ней событие Key F, которое срабатывает по нажатию игроком клавиши F на клавиатуре. Чтобы проверить работу данного события, подсоединим к нему ноду Print String, которая должна будет вывести текст «Hello» при нажатии на F.
При нажатии на F вызовем функцию Print String
При нажатии на F вызовем функцию Print String
  1. Скомпилируем проект, перейдем на игровой уровень и запустим игру. Первое, что мы увидим, это то, что игра запустилась от стандартного персонажа данного шаблона игры от первого лица. Далее мы можем увидеть наш BP_Pawn, размещённый на уровне в виде сферы.
  2. Нажмём клавишу F и… ничего не произойдёт. Хотя BP_Pawn на сцене, и в нём имеется код, выводящий строку «Hello», но при нажатии на F, — всё равно ничего не происходит.

Почему код не срабатывает? Всё просто. Дело в том, что за приём входящих данных от игрока (Input) отвечает Player Controller. А в текущий момент он владеет стандартным персонажем, а не нашим BP_Pawn. Соответственно, нажатие F в нашу Пешку не транслируется. Поэтому, чтобы исправить данную ситуацию, нужно Player Controller связать с нашим BP_Pawn, иначе говоря, нужно сделать так, чтобы он завладел нашей пешкой.

В данной практике мы их свяжем принудительно через свойства Details нашей Пешки. Для этого выделим Пешку, перейдём во вкладку Details в раздел Pawn и в параметре Auto Possess Player укажем Player 0. Так как в нашей демо-игре всего один игрок, то Player 0 и будет означать контроллер текущего игрока.

Во вкладке Details в разделе Pawn в параметре Auto Possess Player нужно указать Player 0
Во вкладке Details в разделе Pawn в параметре Auto Possess Player нужно указать Player 0

Запустим игру и… первое, что увидим, это то, что игрок при старте игры перенёсся из стандартного персонажа в наш BP_Pawn и смотрит на мир камерой по умолчанию, исходящей из центра нашей Пешки. Далее нажмём F, и на экране отобразится текст «Hello».

При нажатии на F на экране отображается текст «Hello»
При нажатии на F на экране отображается текст «Hello»

Всё это стало возможным благодаря тому, что при старте игры контроллер игрока овладел нашим Pawn и стал передавать входящие сигналы игрока (Input сигналы с клавиатуры) в контролируемую Пешку, то есть в наш BP_Pawn.

Поворот камеры BP_Pawn

Теперь реализуем поворот камеры от поворота мыши. Для этого нужно описать поворот самого Player Controller при повороте мыши игрока. Писать этот код с нуля мы не будем, а просто возьмем его и скопируем из персонажа от первого лица данного шаблона игры.

  1. Перейдём в Content Browser по пути /All/Game/FirstPerson/Blueprints и откроем блюпринт BP_FirstPersonCharacter.
  2. Выделим блок кода Camera Input и скопируем его.
  3. Далее вставим скопированный код в наш BP_Pawn.
Блок кода Camera Input
Блок кода Camera Input

Данный код реагирует на событие поворота мыши и передаёт данные о повороте текущему контроллеру.

Теперь встроенная камера BP_Pawn будет также реагировать на поворот мыши, так как по умолчанию камера повторяет поворот контроллера.

Set Actor Location

Начнём реализовывать базовое передвижение объекта BP_Pawn при нажатии на клавишу F при помощи функции Set Actor Location. Данная функция задаёт новые координаты Актора на игровой сцене.

Чтобы реализовать при помощи этой функции передвижение, нужно к текущим координатам объекта добавить смещение в несколько пунктов. И получившиеся новые координаты отправить в Set Actor Location. Данную операцию нужно производить постоянно, в цикле. Таким образом, объект будет передвигаться на величину смещения.

Теперь необходимо рассчитать смещение. Для этого мы получим текущий поворот контроллера игрока и на основе этого поворота вычислим вектор направления вперёд. Этот вектор будет характеризовать направление как контроллера игрока, так и камеры. А также он и станет нашим смещением, которое мы добавим к текущим координатам объекта BP_Pawn.

  1. Удалим функцию Print String, она нам больше не нужна.
  2. После события Key F вызовем функцию Set Actor Location.
  3. Далее нодой Get Control Rotation получим текущий поворот контролера игрока.
  4. Из этого поворота нодой Get Forward Vector вернём единичный вектор направления вперёд.
  5. Далее получим текущие координаты нашего BP_Pawn. Сделаем это нодой Get Actor Location.
  6. Теперь, на последнем шаге, вычислим новые координаты, куда функция Set Actor Location перенесет наш объект. Для этого к текущим координатам из пункта 5 добавим координаты вектора вперед из пункта 4. И весь результат направим в параметр New Location функции Set Actor Location.

Скриншот

Добавляем перемещение Pawn при помощи функции Set Actor Location
Добавляем перемещение Pawn при помощи функции Set Actor Location

Код на BlueprintUE

Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"


Таким образом, при каждом нажатии на F мы будем немного сдвигать наш объект в сторону поворота камеры (контроллера игрока). То есть получим некое подобие передвижения.

Базовое передвижение Pawn

Я думаю, Вы согласитесь, что передвигать объект, постоянно нажимая F, — это не вариант. В качестве цикла для постоянного запуска Set Actor Location должно выступать что-то другое, а вот нажатие на F просто должно включать и выключать этот цикл.

Предлагаю в качестве цикла использовать событие Event Tick. Данное событие срабатывает каждый такт обновления экрана игры. С одной стороны, событие достаточно простое, но с другой стороны, его нужно использовать с особой осторожностью, чтобы не загрузить систему тяжёлым кодом при каждом обновлении экрана. Более подробно об этом событии и тонкостях работы с ним Вы можете узнать в отдельной статье: Unreal Engine Event Tick.

  1. Вызовем событие Event Tick.
  2. Напрямую Set Actor Location к Event Tick мы подключать не будем, так как тогда движение будет постоянным, не реагирующим на нажатие / отжатие F. Чтобы всё это связать воедино, используем ноду Gate, которая действует как некие ворота, пропускающие и не пропускающие сигнал.
  3. Итак, в параметр Enter ноды Gate подадим поток от Event Tick. Так как у Gate параметр Start Closed по умолчанию True, то это означает, что изначально ворота закрыты, и сигнал Enter далее не проходит. Чтобы открыть ворота, подадим сигнал Pressed от события F в параметр Open от ноды Gate. И, соответственно, для закрытия ворот — Released в Close. Таким образом, при нажатии на F мы будем открывать ворота и пропускать сигнал от Event Tick далее, а при отжатии F ворота будут закрываться, блокируя сигнал тика. Осталось только поток Exit ноды Gate переправить во входящий поток Set Actor Location.
  4. Если Вы запустите игру сейчас, то увидите, что наш Pawn передвигается с небольшой скоростью, но при этом не учитывает пересечения с другими объектами, просто перемещаясь сквозь них. Чтобы это исправить, нужно всего лишь у функции Set Actor Location параметр Sweep изменить True. Таким образом, данная функция будет не просто перемещать объект на новые координаты, но и учитывать его столкновение с другими объектами игрового мира. Причём все эти столкновения можно обрабатывать, так как на выходе функции имеется выходной параметр Sweep Hit Result, который раскрывается на большую структуру нодой Break Hit Result, содержащую подробную информацию о столкновении.

Скриншот

Вводим в код ноду Gate
Вводим в код ноду Gate

Код на BlueprintUE

Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"


Обратите внимание, что в таком случае, если будет происходить столкновение, например тогда, когда Вы направите камеру вниз, к полу, то объект будет останавливаться. Чтобы движение возобновилось, необходимо камеру повернуть в другое направление.

Скорость базового передвижения Pawn

В нашей практике осталось настроить последний момент — регулируемая скорость передвижения Pawn. В текущей версии у нас движение создаётся добавочными пунктами из вектора с направлением вперед, которые мы добавляем к текущим координатам на каждом кадре игры. Чтобы увеличить скорость, нужно увеличить эти добавочные пункты. Также, для того чтобы скорость движения объекта была на всех ПК одинаковая, при её расчёте необходимо учесть параметр Delta Seconds из события Event Tick. Что это такое и почему Delta Seconds нужно учитывать, Вы можете прочитать в отдельной статье: Unreal Engine Delta Seconds.

  1. В BP_Pawn введём переменную скорости Speed типа float. Зададим ей начальное значение в 200.
  2. Для того чтобы скорость была одинаковая на всех ПК, умножим Speed на Delta Seconds из события Event Tick.
  3. Получившийся результат умножения еще раз помножим на значения вектора вперед и далее этот результат сложим с текущими координатами Актора. Всё это и будет являться новыми координатами для Set Actor Location, учитывающими значения скорости и Delta Seconds.

Скриншот

Практика в Unreal Engine: создание базового передвижения объекта класса Pawn. Функция Set Actor Location
Практика в Unreal Engine: создание базового передвижения объекта класса Pawn. Функция Set Actor Location

Код на BlueprintUE

Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"


Blueprint-события класса Pawn

Blueprint-события класса Pawn
Blueprint-события класса Pawn
  • Event Possessed — событие, вызываемое на сервере (или в одиночной игре), когда Pawn становится «захвачен» (Possessed) новым контроллером (Controller). Событие позволяет реализовать свою логику в Blueprints в момент, когда Pawn начинает управляться новым контроллером (Player Controller или AI).
  • Event Unpossessed — событие, вызываемое на сервере (или в одиночной игре), когда Pawn перестаёт быть захваченным каким-либо контроллером (Controller). Это означает, что Pawn теперь свободен, и ни один игрок или AI не управляет им.
  • Event Receive Controller Changed — событие, вызываемое и на сервере, и на клиенте-владельце (Owning Client) после того, как у Pawn сменился контроллер (Controller). Это событие срабатывает одновременно с соответствующим делегатом в Game Instance. Именно через данное событие имеется возможность на сетевых клиентах отследить у Пешки смену контроллера. Другие события, упоминаемые выше (Possessed и Unpossessed) не позволяют этого сделать, так как вызываются только на сервере.
  • Event Receive Restarted — событие, вызываемое после перезапуска Pawn (обычно после смены контроллера или респауна), на сервере для всех Pawn и на клиенте-владельце (Owning Client) для Pawn, которыми управляет локальный игрок. Используется для инициализации состояния, запуска эффектов и обновления UI после «возвращения» Pawn в активную игру.

Blueprint-функции класса Pawn

Input (управление вводом)

Функции, связанные с обработкой пользовательского ввода и управлением движением (Input)
Функции, связанные с обработкой пользовательского ввода и управлением движением (Input)
  • Add Controller Pitch Input — добавляет изменение Pitch (наклона вверх/вниз) к Control Rotation контроллера, если Pawn управляется локальным Player Controller. Используется для реализации вертикального наклона камеры/персонажа на основе пользовательского ввода.
  • Add Controller Roll Input — добавляет изменение Roll (крен) к Control Rotation контроллера, если Pawn управляется локальным Player Controller. Используется для реализации управления креном объекта на основе пользовательского ввода.
  • Add Controller Yaw Input — добавляет изменение Yaw (поворот влево/вправо) к Control Rotation контроллера, если Pawn управляется локальным Player Controller. Используется для реализации горизонтального поворота объекта на основе пользовательского ввода.
  • Add Movement Input — добавляет ввод движения по заданному направлению в мировых координатах. В базовом Pawn движение автоматически не применяется — пользователь должен его реализовать сам. В производных классах (Default Pawn, Character) движение обрабатывается автоматически путём встроенных в них компонентов движения (Floating Pawn Movement, Character Movement).
  • Consume Movement Input Vector — возвращает накопленный за кадр вектор ввода движения, сбрасывает его в ноль и сохраняет как последний использованный вектор ввода.
  • Get Last Movement Input Vector — возвращает последний обработанный вектор ввода движения в мировых координатах.
  • Get Pending Movement Input Vector — возвращающий актуальный (ещё не обработанный) накопленный вектор ввода движения в мировых координатах.
  • Is Move Input Ignored — определяет, игнорирует ли Pawn ввод движения.
  • Get Override Input Component Class — возвращает класс компонента ввода (Input Component), который переопределяет стандартный компонент ввода для данного Pawn, если такой класс был явно задан через свойство Override Input Component Class.

Controller & Possession (управление контроллером)

Функции для управления контроллерами, проверки владения и идентификации платформы
Функции для управления контроллерами, проверки владения и идентификации платформы
  • Detach From Controller Pending Destroy — безопасно отсоединяет Pawn от его контроллера перед уничтожением Pawn.
  • Get Controller — возвращает ссылку на контроллер, управляющий этим Pawn.
  • Get Control Rotation — возвращающий угол вращения контроллера, управляющего Pawn (угол обзора).
  • Get Platform User Id — возвращает идентификатор пользователя платформы для Player Controller, управляющего этим Pawn. Если Pawn не управляется локальным игроком, возвращается невалидный идентификатор.
  • Is Locally Controlled — возвращает True, если данный Pawn управляется локальным контроллером (Controller), то есть если управление осуществляется на этом компьютере/устройстве, а не по сети с другого клиента или сервера.
  • Spawn Default Controller — создаёт контроллер по умолчанию для данного Pawn и передаёт ему управление этим Pawn (Possess).

Movement & Navigation (движение и навигация)

Функции для работы с движением, опорными Акторами и навигацией
Функции для работы с движением, опорными Акторами и навигацией
  • Get Movement Base Actor — возвращает Актора-владельца компонента, на котором в данный момент стоит Pawn.
  • Get Movement Component — возвращает первый найденный компонент движения Pawn (Pawn Movement Component), если такой есть.
  • Set Can Affect Navigation Generation — позволяет включать или отключать влияние Pawn на генерацию навигационной сетки Nav Mesh в рантайме.

State Queries (запросы состояния управления Pawn)

Функции запросов состояния управления пешкой (бот, игрок, наличие контроллера)
Функции запросов состояния управления пешкой (бот, игрок, наличие контроллера)
  • Is Bot Controlled — возвращает True, если Pawn управляется ботом (AIконтроллером).
  • Is Controlled — возвращает True, если данный Pawn в текущий момент кем-либо управляется (то есть у него есть валидный Controller). Внимание: метод устарел (Deprecated) начиная с Unreal Engine 4.24. Вместо него рекомендуется использовать функцию Is Pawn Controlled  — если нужно узнать, управляется ли Pawn кем-либо (игроком или AI) или Is Player Controlled — если нужно узнать, управляется ли Pawn игроком.
  • Is Pawn Controlled — возвращает True, если данный Pawn в текущий момент кем-либо управляется (то есть у него есть валидный Controller).
  • Is Player Controlled — возвращает True, если Pawn управляется игроком (через Player Controller).

View & Perception (вид и восприятие)

Функции для работы с камерой, прицеливанием и генерацией шума для ИИ
Функции для работы с камерой, прицеливанием и генерацией шума для ИИ
  • Get Base Aim Rotation — возвращает актуальный угол прицеливания Pawn: для игроков — направление взгляда (камера/прицел), для AI — просто Pawn Rotation.
  • Get Local Viewing Player Controller — возвращает локальный Player Controller, чей вид (камера) сейчас направлен на этот Pawn, независимо от того, управляет ли он им или просто наблюдает.
  • Is Locally Viewed — возвращает True, если этот Pawn в данный момент является целью просмотра (View Target) для какого-либо локального Player Controller — то есть если камера локального игрока (или наблюдателя) сейчас смотрит на этот Pawn.
  • Pawn Make Noise — позволяет Pawn создавать «шум», который могут обнаружить AI Controllers.

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.


наш Телеграм канал

Оцените статью
( 3 оценки, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

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