Существует множество различных способов работы с камерой в играх, и всё здесь зависит от самой игры. В Unreal Engine камеры обычно состоят из актора с компонентом эластичного элемента и компонента камеры, выполняющего отрисовку. Информация о базовой настройке камеры представлена в разделе Использование камер в Unreal Engine.
В этом разделе разработчики расскажут вам о том, как они решили реализовать камеру именно для игры Parrot, а также обо всех этапах настройки, на которые стоит обратить внимание.
Подсистема камеры в игре Parrot
Для начала были определены все карты, на которых настройки камеры будут зависеть от мира.
Разработчиками была создана подсистема UParrotCameraSubsystem, которая передаёт время жизни мира и инициализирует камеру с заданными настройками при BeginPlay. Настройки карт хранятся в AParrotWorldSettings, который как раз и используется для хранения настроек тех или иных карт. Для камеры этими настройками будут желаемый класс камеры, режим перемещения и верхняя/нижняя граница по оси Z, что ограничит движение камеры при следовании за игроком. Сам по себе класс не является обязательным: в его предоставлении нет необходимости. Это выполняется в главном меню.
О том, почему было решено использовать подсистему, подробнее рассказано в статье Подсистемы в игре Parrot.
Настройки мира можно найти на панели Настройки мира в редакторе.
Камера в игре Parrot
Основная логика реализуется в AParrotCamera. Когда камера инициализируется подсистемой, ей передаются игрок, за которым нужно следовать, режим перемещения и границы из настроек мира.
У камеры предусмотрены три режима перемещения: Нет, Фиксированный и Следование.
Нет полностью соответствует своему названию. Камера не будет ничего выполнять.
Фиксированный режим перемещения по своей сути прост. Когда игрок входит в ограниченную область, подсистема камеры задаёт ей фиксированное местоположение для последующей интерполяции. После этого игрок может свободно перемещаться, пока режим перемещения не будет обновлён.
Режим Следование уже является чуть более сложным: для визуального ознакомления с ним рекомендуем перейти в Содержимое/Blueprints/BP_PlatformerCamera. Камера AParrotCamera имеет кубоид, реагирующий на движение, и блокирующую сетку, которые выступают в качестве подобъектов по умолчанию. Это означает, что каждый экземпляр AParrotCamera автоматически добавляет их в свою иерархию. Для получения нужного эффекта они выравниваются по пирамиде видимости камеры, эластичному элементу и перспективе. Оба этих компонента прикрепляются к актору камеры и следуют за ним в мире игры.
Блокирующая сетка сталкивается с игроком и не позволяет ему двигаться назад.
При пересечении игрока с кубоидом, реагирующим на перемещение, камера попытается интерполироваться с заданной скоростью к значению по оси X игрока. Скорость также умножается на расстояние от игрока до крайней левой границы области триггера. Таким образом, чем дальше игрок находится в области, тем быстрее должна двигаться камера, чтобы догнать его.
Это позволяет добиться того, что игрок может свободно перемещаться по левой стороне экрана вплоть до блокирующей сетки, но при этом камера будет двигаться вместе с игроком, когда он пересечёт границу. Кроме того, таким образом мы создаём нужный эффект при перемещении игрока в мире по оси X.
В режиме следования также важно отметить, что в нём выполняется отслеживание последнего известного местоположения игрока. Если Z-координата игрока выходит за границы мира или персонаж игрока уничтожен, мы интерполируем камеру на последнее известное местоположение игрока. Это позволяет предотвратить дрожание или другое подобное нежелательное движение камеры в зависимости от движения или состояния игрока.
Наконец, в компоненте Camera Component из BP_PlatformerCamera также стоит обратить внимание на некоторые параметры. Режим проекции представляет собой перспективу с 90-градусным полем зрения и соотношением сторон 1.77, что эквивалентно стандартному HD. В разделе Параметры камеры мы ограничиваем соотношение сторон, чтобы камера всегда выглядела корректно, независимо от разрешения приложения.