GameState в Unreal Engine. Разбираем Blueprint-класс состояния игры. Функция «Get Game State»

Друзья, приветствую, с Вами Будуев Антон. В этой статье мы обсудим Blueprint-класс Game State, который отвечает в движке Unreal Engine (UE4, UE5) за обработку информации о текущей игре и её состоянии.

Unreal Engine Game State

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

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

В Unreal Engine для решения этой задачи существует класс GameState, который отвечает за состояние игры. Он синхронизирует и хранит всю необходимую информацию о её текущем состоянии, а также информирует всех игроков, включая сетевые клиенты, о любых изменениях в игре.

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

Состояние игры включает в себя данные и логику, касающиеся всех игроков в игре, такие как:

  • результаты команд,
  • цели,
  • список подключённых игроков,
  • оставшееся время текущего раунда,
  • и прочее.

Однако следует отметить, что GameState не является оптимальным решением для хранения информации, специфичной для каждого отдельного игрока. Например, такой как его здоровье или количество очков, набранных игроком за команду. Для этой цели в Анрил Энджин предусмотрен отдельный блюпринт-класс PlayerState, который служит хранилищем данных о состоянии конкретного отдельно взятого игрока.

Как создать Game State

В Анрил Энджин существуют 2 вида класса состояния игры:

  • Game State Base
  • Game State

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

Версия Game State — это расширенный дочерний класс от Base. Эта версия включает в себя все функции базовой версии, а также дополнительные возможности для многопользовательского игрового проекта.

На самом деле выбор между GameStateBase или GameState тесно связан с классом игрового режима — GameMode. А именно, если Вы в своем проекте в Unreal Engine используете GameModeBase, то и класс состояния игры также должен быть базовым GameStateBase. В случае же использования обычного GameMode, то и класс состояния также должен быть GameState.

Так как в большинстве проектов используются базовые версии этих классов, рассмотрим, как создать класс состояния игры именно на примере GameStateBase.

Для этого перейдите в Content Browser и вызовите контекстное меню, щелкнув в браузере правой кнопкой мыши по пустому полю. Выберите меню «Blueprint Class». Далее в открывшемся окне «Pick Parent Class» в форме поиска введите «Game State». После чего нажмите «Select».  В результате ассет базового класса состояния игры будет создан в текущей папке Content Browser.

Создание blueprint класса Game State Base в Unreal Engine (UE4, UE5)
Создание blueprint класса Game State Base в Unreal Engine (UE4, UE5)

Как подключить Game State в Unreal Engine

Чтобы подключить класс состояния игры GameState в Unreal Engine (UE4, UE5), нужен файл GameMode.

Итак, откройте файл GameMode, который используется в Вашем проекте. Перейдите в меню «Class Defaults», далее во вкладку «Details» и в раздел «Classes». В этом разделе найдите настройки «Game State Class» и в выпадающем списке выберите свой класс состояния игры.

Установка пользовательского класса GameState в GameMode
Установка пользовательского класса GameState в GameMode

Если в Вашем проекте файл GameMode отсутствует, его необходимо создать по аналогии с процессом, описанным выше для класса состояния игры. И после подключить Ваш игровой режим в настройках Вашего проекта: «Edit / Project Settings / Maps & Modes / Default GameMode».

Подключение пользовательского класса GameMode
Подключение пользовательского класса GameMode

Как получить текущий Game State. Функция Get Game State

Blueprint-функция "Get GameState" в Unreal Engine (UE4, UE5)Функция «Get Game State» позволяет из любого Blueprint-класса в Unreal Engine (UE4, UE5) получить текущий класс состояния игры. Данныя функция возвращает ссылку на объект базового родительского класса GameStateBase. Если этого объекта не существует, то возвращается пустое значение.

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

Ниже представлен код на языке Blueprint, где с помощью ноды «Get Game State» мы получаем ссылку на объект базового класса состояния игры. Затем, используя функцию приведения типов «Cast to BP_CustomGameState», мы преобразуем эту ссылку в наш пользовательский объект «BP_CustomGameState». И, наконец, сохраняем его в переменной «As BP Custom Game State». Таким образом, в этой переменной у нас хранится объект текущего пользовательского класса состояния игры.

Получаем текущий «BP_CustomGameState» с использованием каста «Cast to BP_CustomGameState»
Получаем текущий «BP_CustomGameState» с использованием каста «Cast to BP_CustomGameState»

Также можно получить доступ к пользовательскому GameState через Blueprint Interface, представляющий собой систему интерфейсов Unreal Engine. Этот вариант более предпочтителен, хотя и немного сложнее. Для этого необходимо создать новый интерфейс «Get Custom Game State» и реализовать его в пользовательском классе состояния игры «BP_CustomGameState».

Получаем текущий «BP_CustomGameState» с использованием пользовательского интерфейса «Get Custom Game State»
Получаем текущий «BP_CustomGameState» с использованием пользовательского интерфейса «Get Custom Game State»

На этом наша статья завершается. В ней мы обсудили Blueprint-класс, который занимается обработкой информации о текущей игре и её состоянии. А именно GameState, представляющий собой класс состояния игры в Unreal Engine (UE4, UE5). Также рассмотрели небольшой практический пример кода на блюпринтах, демонстрирующий работу функции «Get Game State». С помощью которой Вы можете получить текущий пользовательский класс состояния игры в любом месте Вашего проекта.

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

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