- Главная
- Форум
- База знаний (кратко, но по сути)
- Blueprint-классы
- Класс Player Start в Unreal Engine (UE4, UE5) | Ошибка BADsize (BAD size)
Класс Player Start в Unreal Engine (UE4, UE5) | Ошибка BADsize (BAD size)
Player Start
Player Start — это специальный класс в Unreal Engine (UE4 и UE5), который определяет место появления игрока (Pawn или Character) и его направление при запуске уровня, а также во время последующих возрождений (Respawn). Практически на каждом игровом уровне присутствует хотя бы один объект Player Start, поскольку именно его GameMode использует в качестве точки создания игрового персонажа.
Основное назначение Player Start — указать движку, где и в каком направлении должен появиться игрок. Помимо координат спавна, объект задает начальный поворот персонажа, используется при первом запуске уровня и во время повторных появлений, а также служит основой для реализации контрольных точек, командного спавна и пользовательских систем появления.
В редакторе Unreal Editor при выделении мышкой объект Player Start отображается в виде капсулы с голубой стрелкой. Капсула обозначает пространство, необходимое для размещения персонажа, а стрелка показывает направление, в котором он будет смотреть сразу после появления.
С точки зрения производительности Player Start является одним из самых легких объектов Unreal Engine. Он практически не потребляет вычислительных ресурсов, не выполняет никаких операций каждый кадр и используется главным образом в момент создания или возрождения персонажа. После завершения процедуры спавна объект практически не оказывает влияния на производительность игры.
Процесс выбора Player Start
На одном уровне может находиться любое количество объектов Player Start. Это позволяет реализовать многопользовательские режимы, случайный выбор стартовой позиции, разделение игроков по командам, систему контрольных точек и различные сценарии появления в зависимости от режима игры.
Если разработчик не реализовал собственную систему выбора точки появления, GameMode автоматически использует один из доступных объектов Player Start.
В стандартной реализации GameModeBase движок собирает все объекты Player Start, присутствующие на уровне, после чего вызывает функцию ChoosePlayerStart(), которая выбирает наиболее подходящую точку появления.
Как правило, предпочтение отдается свободному Player Start, капсула которого не пересекается с другими акторами. Если свободных точек не найдено, в зависимости от логики GameMode может быть выбрана уже занятая позиция. При этом персонаж может появиться внутри объектов, застрять в коллизии, быть смещен в сторону или вовсе не появиться.
После выбора точки появления GameMode создает экземпляр класса для управляемого персонажа, указанного в параметре Default Pawn Class, размещает его в позиции и задаёт ему поворот от выбранного объекта Player Start и передает управление созданному персонажу через Player Controller. Благодаря этому разработчику обычно не требуется вручную создавать игрового персонажа — весь процесс выполняется автоматически.
По умолчанию выбор точки появления Player Start выполняет функция ChoosePlayerStart(), объявленная в классе GameMode. При необходимости ее можно переопределить в C++ или Blueprint, а также реализовать собственный алгоритм выбора.
Например, точка появления может зависеть от:
- текущего игрового режима;
- команды игрока;
- последней контрольной точки;
- загруженного сохранения;
- уровня или состояния персонажа;
- любых других игровых условий.
Если на уровне нет ни одного объекта Player Start, поведение Unreal Engine зависит от режима запуска игры.
В упакованной игре движок обычно пытается создать персонажа в мировых координатах (0, 0, 0). Если эта точка находится внутри геометрии уровня или недоступна для появления, персонаж может появиться внутри объектов, застрять в коллизии, быть смещен в сторону или вовсе не появиться.
При запуске игры из редактора (Play In Editor, PIE) при отсутствии объекта Player Start по умолчанию нередко используется положение текущей камеры окна Viewport (режим Spawn Player at: Current Camera Location).
Ошибка BADsize
Одной из наиболее распространенных проблем при работе с Player Start является появление надписи BADsize (BAD size).
Она означает, что капсула Player Start пересекается с объектом, имеющим блокирующую коллизию (Collision Response: Block). Это могут быть стены, пол, мебель, элементы окружения, другие акторы или даже невидимые объекты.
Следует учитывать, что сообщение BADsize может появиться даже тогда, когда визуально Player Start находится в свободном пространстве. Причиной могут быть скрытые объекты, триггеры или любые другие компоненты с блокирующей коллизией.
В большинстве случаев проблему можно легко устранить просто немного приподняв Player Start над поверхностью или отодвинув его от другого объекта.
Также, если Player Start висит над поверхностью, то чтобы при запуске игры персонаж не падал, необходимо Player Start поставить на поверхность. Сделать это можно либо вручную, либо нажать клавишу End. При этом если под объектом находится Static Mesh или Landscape с корректно настроенной коллизией, редактор автоматически переместит Player Start на ближайшую поверхность.
Использование тега Player Start Tag
Каждому объекту Player Start можно назначить значение специализированного тега Player Start Tag в панели Details. Этот тег позволяет однозначно идентифицировать конкретную точку появления.
Например, такими тегами могут быть:
- LevelStart — начальная точка уровня;
- Checkpoint1 — первая контрольная точка;
- BossRoom — место появления перед битвой с боссом;
- BlueTeam — точка появления синей команды.
Используя такие теги, GameMode или пользовательская система спавна могут выбрать именно ту точку появления, которая соответствует текущей игровой ситуации.
Этот подход широко применяется при реализации контрольных точек, загрузке сохранений, телепортации между уровнями, сюжетных переходах, разделении игроков по командам и пользовательских системах Respawn.
Более подробно о применении тега Player Start Tag вы можете узнать в отдельной статье: Player Start Tag
Итог
Player Start — это специализированный класс Unreal Engine, определяющий место и направление появления игрока в игровом мире. Он тесно взаимодействует с GameMode, автоматически участвует в процессе создания персонажа и используется как при первом запуске уровня, так и при последующих возрождениях.
Поддержка нескольких точек появления, возможность переопределить алгоритм их выбора и использование системы тегов делают Player Start одним из ключевых элементов системы спавна в Unreal Engine. На его основе реализуются контрольные точки, командный и многопользовательский спавн, загрузка сохранений, сюжетные переходы и многие другие игровые механики.
Практически во всех проектах на Unreal Engine — от шутеров и RPG до гонок, VR-приложений и архитектурных визуализаций — именно Player Start обеспечивает корректное появление игрока и служит фундаментом всей системы спавна.
===============
Зарегистрироваться в ЛК и скачать книгу по Blueprint: [Blueprint. Взгляд с высоты «птичьего полёта»]
