GameMode в Unreal Engine: разбираем Blueprint-класс игрового режима. Функция «Get Game Mode»

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

Unreal Engine Game Mode

Каждая игра, даже самая простая, основана на определённых правилах, которые определяют её суть. В Анрил Энджин именно класс GameMode определяет набор правил игры, а также её общую логику и структуру. То есть, именно в нём Вы можете прописать на блюпринтах логику правил Вашего игрового проекта. Эти правила могут включать в себя:

  • порядок присоединения игроков к игре;
  • возможность приостановки игры;
  • правила перехода на следующий уровень;
  • подсчет очков игроков;
  • контрольные точки, которые определяют состояние игрового процесса;
  • количество присутствующих игроков и зрителей, а также их максимально допустимое количество;
  • порядок, в котором игроки начинают игру;
  • правила выбора места появления (Spawn, спавна) игроков или их возрождения;
  • условия выигрыша;
  • и другие правила игрового мира.

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

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

* Для передачи данных между уровнями используется отдельный Blueprint-класс GameInstance, который существует в единственном экземпляре на протяжении всей игры.

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

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

GameMode и базовые классы фреймворка Unreal Engine

На самом деле, в GameMode описываются не только игровые правила, но и устанавливаются базовые классы игрового процесса (фреймворка Unreal Engine) для загруженного уровня. Так как именно в этом классе определяется общая логика и структура игры. Именно игровой режим устанавливает каким Pawn’ом будет управлять игрок на данном уровне, какой при этом Player Controller используется и где хранится информация о состоянии игрока.

Инициализация игрового процесса (фреймворка) выглядит так. При запуске проекта сначала загружается игровой уровень, который, в свою очередь, активирует GameMode. А он уже загружает основные классы игрового процесса в UE5 (UE4) для текущего уровня. А именно:

  • Game Session Class — игровые сессии. Настройка операций авторизации на сервере и интерфейса для онлайн-игр (для мультиплеерных проектов).
  • Game State Class — состояние игры. Содержит информацию о текущем состоянии игры и ее игроков в мультиплеерных проектах (количество игроков, общий счет и прочее).
  • Player Controller Class — контроллер игрока. Класс, отвечающий за управление поведением Pawn (Character).
  • Player State Class — состояние игрока. Содержит информацию о текущем состояние конкретного игрока (количество очков, здоровье и прочее).
  • HUD Class — создание интерфейса игрока в игре.
  • Default Pawn Class — Pawn (Character) по умолчанию, которым будет управлять игрок при старте игры.
  • Spectator Class — класс наблюдателя (зрителя). Создаёт в игровом мире вместо сущности игрока объект камеры, с помощью которой можно просто наблюдать за ходом игры.
  • Replay Spectator Player Controller Class — класс контроллера игрока для наблюдателя (зрителя).
  • Server Stat Replicator Class — класс репликации статистики сервера (для мультиплеерных проектов).

Поэтому, если в Вашем проекте необходимо использовать какой-либо из этих вышеперечисленных классов для реализации своей логики (например, Вы собираетесь создать свой пользовательский Player Controller или Default Pawn Class), то подключить их можно в GameMode. А именно в его настройках во вкладке «Details / Classes». Например, как подключен Default Pawn Class на рисунке ниже.

Подключение Default Pawn Class в настройках Game Mode Unreal Engine
Подключение Default Pawn Class в настройках Game Mode Unreal Engine

Как создать Game Mode Base

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

  • Game Mode Base
  • Game Mode

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

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

Поэтому, скорее всего, у Вас будет использоваться именно базовый класс режима игры. Давайте рассмотрим, как создать Game Mode Base в проекте Unreal Engine.

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

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

Как подключить GameMode к игровому проекту в Unreal Engine

После того, как Вы создадите и настроете режим игры, его необходимо подключить к Вашему проекту в UE5 (UE4), либо к конкретному уровню отдельно.

Для каждого игрового уровня должен быть определен свой конкретный режим игры. Но это совсем не означает, что мы не сможем использовать ассет GameMode повторно. Совсем даже наоборот. Если правила игры на разных уровнях одинаковые, то можно на всех этих уровнях использовать один и тот же файл игрового режима.

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

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

Подключение пользовательского класса GameMode в настройках проекта Unreal Engine
Подключение пользовательского класса GameMode в настройках проекта Unreal Engine

Для того чтобы подключить игровой режим непосредственно на игровом уровне, откройте этот уровень. Далее перейдите в его настройки, в раздел переопределения игрового режима и выберите свой пользовательский ассет игрового режима: «World Settings / Game Mode / GameMode Override».

Подключение GameMode в настройках уровня
Подключение GameMode в настройках уровня

Настройки Details для Unreal Engine Game Mode (class Defaults)

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

Настройки GameMode во вкладке Details
Настройки GameMode во вкладке Details

Classes

Меню Classes мы уже рассматривали выше в разделе «Базовые классы фреймворка Unreal Engine».

Game:

  • Default Player Name — имя игрока по умолчанию, назначаемое игрокам, которые подключились к игре без указания имени.

Game Mode:

  • Use Seamless Travel (bool, по умолчанию False). Использовать функцию SeamlessTravel() для реализации перемещения по карте игры. Функция загружается в фоновом режиме и не приводит к отключению клиентов.
  • Start Players as Spectators (bool, по умолчанию False). Подключение игроков в качестве наблюдателя. True — игрок присоединяется к игре как наблюдатель и остаётся в этом статусе до тех пор, пока его не добавят в игру вручную. False — игрок создается в игре сразу.
  • Pauseable (bool, по умолчанию True). Можно или нет ставить игру на паузу.
  • Game Net Driver Replication System (по умолчанию Default). Используется в мультиплеерах для запроса конкретной системы репликации для GameNetDriver, которая будет воспроизводить текущий GameMode. Возможные варианты выбора: Default, Generic, Iris.

Как получить текущий GameMode. Blueprint-функция Get Game Mode.

Blueprint-функция Get Game Mode в Unreal EngineВ Анрил Энджин Blueprint-функция «GetGameMode» возвращает ссылку на объект базового родительского класса GameModeBase. Если этого объекта не существует (например, на клиенте в многопользовательских проектах), то возвращается пустое значение.

То есть именно при помощи блюпринт-функции «GetGameMode» мы можем получить текущий игровой режим абсолютно из любого пользовательского блюпринта.

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

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

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

Также есть возможность получить пользовательский GameMode через Blueprint Interface (интерфейсы Unreal Engine). Этот вариант предпочтительнее, но немного сложнее. В этом случае необходимо дополнительно создать свой интерфейс «Get Custom Game Mode» и реализовать его в пользовательском классе игрового режима «BP_CustomGameMode».

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

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

 

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

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