- Unreal Engine Game Mode
- GameMode и базовые классы фреймворка Unreal Engine
- Как создать Game Mode Base и его отличие от GameMode
- Как подключить GameMode к игровому проекту в Unreal Engine
- Настройки Details для Unreal Engine Game Mode (class Defaults)
- Как получить текущий GameMode. Blueprint-функция Get Game Mode.
- Override functions. Переопределение функций в Game Mode
- Inherited variables. Унаследованные переменные в GameMode
- Практика в Unreal Engine №1. Переносим данные через уровни с помощью Options String Game Mode
- Передаём значение переменной в параметр Option функции Open Level
- Считываем необходимую информацию из переменной Options String
- Практика в Unreal Engine №2. Game Mode: Выбор точки спавна игрока, функция Choose Player Start
Друзья, приветствую, с Вами Будуев Антон. В этой статье мы обсудим один из ключевых Blueprint-классов, который отвечает за обработку информации о текущей игре. Речь пойдёт о классе Game Mode (игровой режим) в Unreal Engine (UE4, UE5).
Обсудим для чего этот класс существует. Как он распространяется в сетевых играх. Разберём все функции и события, которые можно переопределить в GameMode. А также на практике в Blueprints поработаем с двумя примерами, связанными с классом игрового режима: перенос данных через уровни и выбор места спавна игрока.
В целом же, в данной статье на практике мы будем работать со следующими функциями, событиями и переменными, которые так или иначе связаны с Game Mode в Unreal Engine: «Get Game Mode», «Event On Post Login», «Options String» / «Parse Option», «Choose Player Start» и другими вспомогательными функциями.
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 на рисунке ниже.
Как создать Game Mode Base и его отличие от GameMode
В Анрил Энджин существуют 2 вида игровых режимов:
- Game Mode Base
- Game Mode
GameModeBase — это базовая и основная версия игрового режима. В большинстве проектов, особенно в однопользовательских играх, используют именно её. Поскольку она проще, легче и не содержит лишних функций.
Версия Game Mode — это расширенный дочерний класс от Base. Эта версия включает в себя все функции базовой версии, а также дополнительные возможности для многопользовательского игрового проекта, например, как MatchState (состояние мультиплеерного матча) и другие мультиплеерные возможности. Версия GameMode берёт своё начало из многопользовательского шутера от первого лица Unreal Tournament. Именно поэтому этот класс содержит множество функций, предназначенных для мультиплеерных игр.
Начиная с версии Unreal Engine 4.14, класс GameMode был разделён на два: GameModeBase и GameMode. GameModeBase был разработан как упрощённая и облегчённая версия, которая в основном используется в однопользовательских играх.
Поэтому, скорее всего, у Вас будет использоваться именно базовый класс режима игры. Давайте рассмотрим, как создать Game Mode Base в проекте Unreal Engine.
Для этого перейдите в Content Browser и вызовите контекстное меню, щелкнув в браузере правой кнопкой мыши по пустому полю. Выберите меню «Blueprint Class». Далее в открывшемся окне «Pick Parent Class» нажмите на кнопку «Game Mode Base». В результате ассет базового класса игрового режима будет создан в текущей папке Content Browser.
Как подключить GameMode к игровому проекту в Unreal Engine
После того, как Вы создадите и настроете режим игры, его необходимо подключить к Вашему проекту в UE5 (UE4), либо к конкретному уровню отдельно.
Для каждого игрового уровня должен быть определен свой конкретный режим игры. Но это совсем не означает, что мы не сможем использовать ассет GameMode повторно. Совсем даже наоборот. Если правила игры на разных уровнях одинаковые, то можно на всех этих уровнях использовать один и тот же файл игрового режима.
Или можно поступить ещё проще: указать один общий GameMode в настройках всего проекта. Тогда каждый новый игровой уровень будет использовать его по умолчанию. Если же на каком-то уровне Вам понадобится установить другой режим игры, Вы всегда сможете настроить его отдельно для этого уровня, указав соответствующий файл игрового режима в настройках уровня.
Итак, чтобы подключить Game Mode ко всему проекту, перейдите в его настройки «Edit / Project Settings / Maps & Modes / Default GameMode» и укажите там Ваш собственный класс игрового режима.
Для того чтобы подключить игровой режим непосредственно на игровом уровне, откройте этот уровень. Далее перейдите в его настройки, в раздел переопределения игрового режима и выберите свой пользовательский ассет игрового режима: «World Settings / Game Mode / GameMode Override».
Настройки Details для Unreal Engine Game Mode (class Defaults)
В меню Details содержатся как унаследованные параметры от класса Actor, так и настройки, характерные для разбираемого класса. Параметры для Actor мы уже разбирали в соответствующей статье про класс акторов. Сейчас же сконцентрируемся только на настройках GameMode.
Classes
Меню Classes мы уже рассматривали выше в разделе «Базовые классы фреймворка Unreal Engine».
Game:
- Default Player Name — имя игрока по умолчанию, назначаемое игрокам, которые подключились к игре без указания имени.
Game Mode:
- Use Seamless Travel (bool, по умолчанию False). Использовать ли функцию SeamlessTravel() для реализации перехода между уровнями игры. Функция загружается в фоновом режиме и не приводит к отключению клиентов.
Seamless travel — это функция в Unreal Engine, которая позволяет сохранять сетевые соединения между сервером и клиентами во время загрузки следующего игрового уровня. Она включает в себя загрузку небольшой карты в качестве переходной, что даёт возможность собрать информацию о предыдущем уровне и затем продолжить загрузку следующего уровня. Это помогает предотвратить высокий уровень использования памяти и возможные проблемы с её нехваткой на ограниченных платформах. А также даёт возможность получить ровный бесшовный переход с уровня на уровень для всех сетевых игроков.
- 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-функция «GetGameMode» возвращает ссылку на объект базового родительского класса GameModeBase. Если этого объекта не существует (например, на клиенте в многопользовательских проектах), то возвращается пустое значение.
То есть именно при помощи блюпринт-функции «GetGameMode» мы можем получить текущий игровой режим абсолютно из любого пользовательского блюпринта.
Но так как возвращается ссылка именно на базовый родительский класс движка Unreal Engine, то необходимо данную ссылку при помощи Cast (каста) привести к типу Вашего пользовательского класса игрового режима, чтобы получить доступ ко всем его функциям и переменным.
Ниже представлен Blueprint-код, в котором с помощью ноды «Get Game Mode» мы получаем ссылку на объект базового игрового режима. Затем, используя функцию приведения типов «Cast to BP_CustomGameMode» , преобразуем эту ссылку в наш пользовательский объект «BP_CustomGameMode». И сохраняем его в переменной «As BP Custom Game Mode». Таким образом, в этой переменной мы получили объект текущего пользовательского игрового режима.
Скриншот
Код на BlueprintUE
Также есть возможность получить пользовательский GameMode через Blueprint Interface (интерфейсы Unreal Engine). Этот вариант предпочтительнее, но немного сложнее. В этом случае необходимо дополнительно создать свою интерфейсную функцию «Get Custom Game Mode» и реализовать её в пользовательском классе игрового режима «BP_CustomGameMode».
Скриншот
Код на BlueprintUE
Override functions. Переопределение функций в Game Mode
В классе GameMode, в разделе «Function / Override», находятся системные функции и события, которые можно переопределить. Это позволяет настроить их работу в Unreal Engine в соответствии с уникальными правилами Вашей собственной игры.
То есть в этих функциях и событиях по умолчанию уже описана определённая системная логика, которую Вы, исходя из Ваших потребностей и правил игры, можете изменить.
В данном разделе перечислены функции, унаследованные как от класса Actor, так и от базового класса игрового режима.
Override functions от Actor мы уже обсуждали в соответствующей статье, сейчас же сосредоточимся на разборе функций переопределения для рассматриваемого в этой статье класса Game Mode Base.
- Can Spectate
Функция «Can Spectate» возвращает True, если Viewer (зрителю, Player Controller) разрешено наблюдать за происходящим с точки зрения View Target (состояния игрока Player State). Иначе — False. Соответственно, внутри этой функции Вы можете описать свою логику, отличающуюся от стандартной, по которой будет определяться, может ли контроллер наблюдать или нет.
Входящие параметры:
Viewer — ссылка на объект базового класса PlayerController;
View Target — ссылка на объект базового класса PlayerState.
- Choose Player Start
Функция «Choose Player Start» возвращает «лучшее» место старта (лучший актор PlayerStart на игровом уровне) для спавна (появления) игрока. По умолчанию система выбирает случайный свободный PlayerStart, отдавая предпочтение тем, которые не заблокированы геометрическими объектами. Возвращаемое значение (Return Value) — выбранный PlayerStart (ссылка на объект базового класса Actor).
Входящий параметр:
Player — ссылка на объект базового класса Controller, который используется для игрока, появляющегося в точке спавна PlayerStart.
- Find Player Start
Функция «Find Player Start» производит поиск и возвращает актор PlayerStart, который должен использоваться при спавне (создании) игрока. При этом, если данная функция переопределена, то будет использоваться тот актор PlayerStart, который возвратит данная переопределённая функция. Если же у этой функции нет пользовательского переопределяющего кода, то по умолчанию для поиска PlayerStart будет вызвана функция «Choose Player Start». Также данная функция позволяет осуществить поиск PlayerStart с определенным тегом (свойство IncomingName).
Входящие параметры:
Player — ссылка на объект базового класса Controller, который используется для игрока, появляющегося в точке спавна PlayerStart;
Incoming Name (string) — определяет тег PlayerStart, который будет использоваться для спавна игрока.
Обе функции «ChoosePlayerStart» и «FindPlayerStart» позволяют Вам переопределить стандартный метод выбора точек спавна игрока из нескольких акторов PlayerStart, размещённых на игровом уровне. При этом «FindPlayerStart» главнее «ChoosePlayerStart».
То есть, если Вы в Game Mode переопределили функцию «Find…», то выбор точки спавна будет определятся именно в этой функции. Если же Вы не переопределяли функцию «Find…», то выбор точки спавна определяется через «ChoosePlayerStart».
* Чуть ниже, в следующем разделе этой статьи, функцию «ChoosePlayerStart» мы будем разбирать на практическом примере «Выбор точки спавна для игрока».
- Get Default Pawn Class for Controller
Функция «Get Default Pawn Class for Controller» возвращает «Default Pawn Class» для используемого контроллера.
Входящий параметр:
In Controller — ссылка на объект базового класса Controller, который используется в текущий момент.
- Handle Starting New Player
Событие «Handle Starting New Player» срабатывает при появлении нового игрока на уровне. Соответственно, переопределив данное событие, Вы можете инициализировать нового игрока (выполнить свой пользовательский код в момент появления нового игрока для его настройки).
Входящий параметр:
New Player — ссылка на объект базового класса PlayerController для нового игрока.
- Init Start Spot
Событие «Init Start Spot» вызывается при инициализации точки старта нового игрока.
Входящие параметры:
Start Spot — ссылка на объект базового класса Actor, являющегося точкой старта нового игрока;
New Player — ссылка на объект базового класса Controller, управляющего новым игроком.
- Initialize HUD For Player
Событие «Initialize HUD For Player» вызывается при инициализации объекта HUD для нового игрока.
Входящий параметр:
New Player — ссылка на объект базового класса PlayerController, управляющего новым игроком.
- Must Spectate
Функция «Must Spectate» возвращает значение True, если новому Player Controller разрешено присоединиться к серверу в качестве наблюдателя. Иначе False.
Входящий параметр:
New PlayerController — ссылка на объект базового класса PlayerController, управляющего новым игроком.
- On Change Name
Событие «On Change Name» вызывается в момент изменения имени.
Входящие параметры:
Other — ссылка на объект базового класса Controller, управляющего игроком;
New Name (string) — новое имя игрока;
Name Change (boolean) — возвращает True, если имя изменено. False, если имя присваивается впервые.
- On Logout
Событие «On Logout» вызывается, когда контроллер вместе со связанным Player State покидают игру.
Входящий параметр:
Exiting Controller — ссылка на объект базового класса Controller, покидающего игру.
- On Post Login
Событие «On Post Login» вызывается, когда новый игрок успешно вошёл в систему и получил свой контроллер игрока.
Входящий параметр:
New Player — ссылка на объект базового класса PlayerController, управляющего новым игроком.
Ниже представлен blueprint-код, где мы переопределяем событие «OnPostLogin» в Unreal Engine. То есть, к родительскому функционалу этого события добавляем свой функционал. А именно, добавляем PlayerController подключённого игрока в общий массив контролеров всех актуальных игроков.
Скриншот
Код на BlueprintUE
- On Restart Player
Событие «On Restart Player» вызывается при рестарте игрока.
Входящий параметр:
New Player — ссылка на объект базового класса Controller переподключаемого игрока.
- On Swap Player Controllers
Событие «On Swap Player Controllers» вызывается при замене PlayerController в результате бесшовного перемещения с одного уровня на другой (при Seamless travel).
Входящие параметры:
Old PC — ссылка на заменяемый объект базового класса PlayerController;
New PC — ссылка на новый объект базового класса PlayerController.
- Player Can Restart
Функция «Player Can Restart» возвращает значение True, если игроку позволено произвести рестарт. False — запрещено.
Входящий параметр:
Player — ссылка на объект базового класса PlayerController.
- Should Reset
Функция «Should Reset» возвращает значение True, если для «Actor to Reset» должен выполнятся вызов функции Reset() при перезапуске игры. False — если перезапуск будет выполнять код из класса Game Mode, либо, если для актора сброс не требуется.
Входящий параметр:
Actor to Reset — ссылка на объект базового класса Actor.
- Spawn Default Pawn at Transform
Функция «Spawn Default Pawn at Transform» вызывается во время действия функции RestartPlayer(). Возвращает объект «Default Pawn Class», которым овладеет игрок при рестарте.
Входящие параметры:
New Player — ссылка на объект базового класса Controller, для которого создаётся «Default Pawn Class».
Spawn Transform — значение Transform (Location, Rotation, Scale), при котором должен быть создан «Default Pawn Class».
- Spawn Default Pawn For
Функция «Spawn Default Pawn For» вызывается во время действия функции RestartPlayer() при использовании Start Spot (места спавна). Возвращает объект «Default Pawn Class», которым овладеет игрок при рестарте.
Входящие параметры:
New Player — ссылка на объект базового класса Controller, для которого создаётся «Default Pawn Class».
Start Spot — ссылка на объект базового класса Actor, на месте которого должен быть создан «Default Pawn Class».
Inherited variables. Унаследованные переменные в GameMode
В Game Mode также имеется список важных унаследованных переменных, которые Вы можете использовать в своей работе в Unreal Engine. Самая важная и чаще используемая из этих переменных — Options String.
Options String (string) — строка параметров. Переменная содержит в себе одну строку со множественными параметрами, разделенными символом «?». Эти параметры можно передавать через функцию «OpenLevel» или при вызове «ServerTravel» в качестве консольной команды.
Также в игровом режиме доступны и другие унаследованные переменные:
- Use Seamless Travel (bool) — используется ли функция SeamlessTravel() для реализации перемещения по карте игры (True / False).
- Start Players as Spectators (bool) — подключается ли игрок в качестве наблюдателя (True / False).
- Pauseable (bool) — можно ли ставить игру на паузу (True / False).
- Game Net Driver Replication System — тип репликации для GameNetDriver (Default, Generic, Iris).
Практика в Unreal Engine №1. Переносим данные через уровни с помощью Options String Game Mode
В Unreal Engine есть специальный класс Game Instance, который позволяет переносить информацию через уровни. Он существует на протяжении всей игры и не зависит от загрузки уровней. Благодаря этому в нём можно сохранять данные при переходе между уровнями.
Однако в классе Game Mode есть небольшая хитрость — унаследованная переменная Options String, которая представляет собой строку со множеством параметров, разделённых знаком вопроса (?). Эти параметры задаются в функции OpenLevel, которая загружает новые уровни.
Таким образом, при загрузке нового уровня мы можем сохранить необходимые параметры из предыдущего уровня в переменной Options String с помощью функции OpenLevel. В дальнейшем, при загрузке следующего уровня, мы сможем вновь получить эти сохраненные параметры из Options String.
Давайте рассмотрим этот процесс на конкретном практическом примере.
Задача заключается в следующем: у игрового персонажа есть переменная Points, в которой хранятся набранные игроком очки. Необходимо обеспечить сохранение значения этой переменной при переходе на новый уровень.
Передаём значение переменной в параметр Option функции Open Level
Весь blueprint-код мы будем прописывать внутри персонажа «BP_ThirdPersonCharacter» из стандартного шаблона игры от третьего лица в Unreal Engine (UE5).
На клавишу «L» при помощи функции Open Level назначим загрузку нового уровня. Для простоты примера будем загружать тот же самый уровень «ThirdPersonMap».
Итак, у функции Open Level имеется параметр Option, в который можно передать необходимую информацию. При загрузке нового уровня эта информация будет сохранена в переменной Options String в классе Game Mode. Даная информация в Unreal Engine записывается в виде ключа и значения.
Например, у нас есть переменная Points, значение которой равно 3. Согласно условиям задачи, нам необходимо передать значение этой переменной на новый уровень. Для этого нужно передать информацию в параметр Option в виде пары ключ-значение, то есть в виде строки «Points=3».
Чтобы сформировать строку «Points=3», мы можем воспользоваться функцией Append. Для этого нужно объединить строку «Points=» со значением нашей переменной «Points», которая хранит набранные игроком очки.
Скриншот
Код на BlueprintUE
Считываем необходимую информацию из переменной Options String
После загрузки нового уровня мы можем восстановить значение переменной Points. Для этого, когда происходит событие «Event BeginPlay», мы обращаемся к переменной Options String, которая хранится в движке Unreal Engine в классе GameMode. Именно в эту переменную функция Open Level сохраняет всю информацию, которую мы передавали в параметр Option.
В строке Options String содержится множество параметров, разделённых знаком вопроса (?). Чтобы извлечь нужное значение, необходимо выполнить парсинг этой строки с помощью функции Parse Option. В качестве параметров для функции следует указать саму строку Options String и ключ, значение которого мы хотим получить. В нашем случае это ключ «Points».
Функция ParseOption, получив ключ «Points», вернёт значение 3, которое затем нам необходимо сохранить в переменной Points персонажа «BP_ThirdPersonCharacter».
Скриншот
Код на BlueprintUE
Таким образом, используя унаследованную переменную Options String класса Game Mode мы передали необходимую информацию с одного уровня на другой не используя для этого класс GameInstance.
Практика в Unreal Engine №2. Game Mode: Выбор точки спавна игрока, функция Choose Player Start
По умолчанию в Unreal Engine (UE4, UE5), если на игровом уровне имеется несколько точек спавна (PlayerStart), откуда игрок может начать свой путь, выбор между акторами PlayerStart осуществляется случайным образом. Однако, у нас есть возможность настроить правила выбора этих точек по своему усмотрению. Для этого необходимо переопределить функцию «Choose Player Start» в классе Game Mode.
Задача: необходимо изменить стандартное случайное определение точки старта (PlayerStart) на пользовательский выбор, основанный на теге 2. Если тег 2 не будет найден среди всех объектов (PlayerStart), расположенных на уровне, то выбор будет осуществляться в стандартном порядке, то есть случайным образом.
Итак, для начала необходимо открыть функцию «Choose Player Start» для переопределения. Для этого перейдите в блюпринт GameMode в раздел «Function / Override» и вызовите функцию «ChoosePlayerStart».
Также актору PlayerStart_2 на игровом уровне нужно добавить тег 2.
Затем нам нужно собрать всех акторов класса PlayerStart в один общий массив. Для этого мы воспользуемся функцией «Get All Actor Of Class», в которой в параметре «Actor Class» укажем значение «PlayerStart». В итоге эта функция вернёт нам список всех акторов класса PlayerStart, присутствующих на игровом уровне.
После чего нужно выполнить цикл «For Each Loop», чтобы перебрать все акторы из массива и проверить, есть ли у каждого из них тег 2. Если такой тег найден, то цикл и функция в целом завершаются с помощью ноды «Return Node», в которую передается актор с найденным тегом. Именно этот актор будет использоваться для создания игрока при запуске игры.
Если в ходе цикла тэг 2 не будет найден ни у одного из акторов, то по завершении этого цикла мы активируем родительский функционал «Parent: Choose Player Start». В итоге этот функционал выберет актор «PlayerStart» случайным образом.
Скриншот
Код на BlueprintUE
Итак, переопределив функцию «Choose Player Start» в классе Game Mode, мы смогли настроить выбор места появления игрока (Player Start) в соответствии с нашими правилами. В случае, если ситуация не будет соответствовать установленным условиям, выбор места появления игрока будет осуществляться в стандартном случайном порядке, как это предусмотрено по умолчанию.
На этом мы завершаем нашу статью. Мы обсудили Blueprint-класс, который отвечает за обработку информации о текущей игре. А именно класс GameMode, представляющий собой игровой режим в Unreal Engine (UE4, UE5). Рассмотрели, для чего он нужен, как его использовать и его настройки. А также разобрали несколько практических примеров кода на Blueprint с демонстрацией функций «Get Game Mode», «Event On Post Login», «Options String» / «Parse Option» и «Choose Player Start».
Добрый день! Только начал разбираться в анриале, так что не судите строго, пожалуйста. У меня вопрос по первому заданию. При переносе данных из Get Game Mode в Parse option у меня вызывается функция Get Display Name, Что не похоже на то что в примере. Подскажите пожалуйста как это исправить. И на конце выходит что очки равны нулю (в конце сделал Print String, что-бы выводило сколько очков)
Андрей, здравствуйте.
Get Game Mode не нужно напрямую подсоединять к функции Parse Option. Из Get Game Mode нужно вызвать параметр «Options String», в котором, собственно, и хранится вся информация. Но эту информацию нужно «распарсить» функцией Parse Option. То есть, порядок такой, Get Game Mode -> Options String -> Parse Option