GameMode, World и Level: правила и сцены
Урок объясняет, как Unreal организует игру: World, Level и GameMode с его правилами.
GameMode — это класс, который задаёт правила игры: какой персонаж у игрока, какой контроллер, условия победы. Level — это сцена с объектами, а World — контейнер, объединяющий всё происходящее.
Уровни, миры и правила
Чтобы не путаться, разложим три понятия по полочкам. Level (уровень) — это файл со сценой: расставленные Actor'ы, свет, геометрия. Это аналог Scene в Unity. World (мир) — это среда выполнения, в которой живут один или несколько уровней одновременно (например, основной уровень плюс подгруженные куски). GameMode — это «свод правил», действующий в данном мире: кто игрок, как он спавнится, когда игра заканчивается.
World (среда выполнения) +-- Persistent Level (главная сцена) | +-- Streamed Level A (подгружаемый кусок) | +-- Streamed Level B +-- GameMode (правила) +-- GameState (общее состояние матча)
Что задаёт GameMode
GameMode — это то место, где вы указываете движку набор основных классов вашей игры. Он определяет, какой Pawn получит игрок по умолчанию, какой PlayerController использовать, какой HUD показывать. GameMode существует только на сервере (или в одиночной игре) и отвечает за логику правил, а не за отрисовку.
| Свойство GameMode | За что отвечает |
| Default Pawn Class | Какое тело получит игрок при спавне |
| Player Controller Class | Какой контроллер управляет игроком |
| HUD Class | Какой интерфейс показывать |
| Game State Class | Где хранить общее состояние матча |
GameMode и GameState
GameMode держит правила и живёт только на сервере. Чтобы данные о матче (например, счёт команд или оставшееся время) были доступны всем игрокам, их кладут в GameState — он реплицируется на всех клиентов. Это разделение особенно важно в мультиплеере.
Как работает под капотом
При загрузке уровня движок создаёт World, затем смотрит, какой GameMode назначен (в настройках проекта или у самого уровня), и создаёт его экземпляр. GameMode спавнит для подключившегося игрока PlayerController, затем — Default Pawn, и связывает их. Когда вы переключаете уровень функцией Open Level, старый World уничтожается и создаётся новый — поэтому объекты прошлого уровня не сохраняются автоматически.
Частые ошибки
- Хранить общие данные в GameMode в мультиплеере. GameMode есть только на сервере; для общих данных используйте GameState.
- Путать Level и World. Level — это файл-сцена, World — среда выполнения, которая может содержать несколько уровней.
- Забыть назначить GameMode. Без правильного GameMode игрок может появиться не тем персонажем или вообще не появиться.
Где назначается GameMode
GameMode можно задать на двух уровнях. Глобально — в настройках проекта (Project Settings → Maps and Modes): этот режим действует по умолчанию во всех уровнях. Локально — в настройках конкретного уровня (World Settings), где можно переопределить режим только для него. Это удобно: главное меню использует один GameMode (без персонажа, только UI), а игровой уровень — другой, с полноценным геймплеем. Движок при загрузке уровня сначала смотрит на его World Settings, и только если там пусто — берёт глобальную настройку.
Такое разделение помогает держать проект в порядке. Не нужно городить в одном GameMode ветвления «если это меню, то...»: достаточно сделать отдельные режимы под разные ситуации и назначить их соответствующим уровням. Каждый режим отвечает за свой контекст и остаётся простым.
Итоги
- Level — сцена (аналог Scene в Unity), World — среда выполнения с уровнями.
- GameMode задаёт правила: классы Pawn, контроллера, HUD, GameState.
- GameMode живёт на сервере; общие данные матча хранят в GameState.
- Смена уровня уничтожает старый World — данные не переносятся автоматически.