Cinemachine в 2D играх на Unity

<?the_title()?>

В этом посте мы узнаем, как создать эффект камеры, обычно используемый в 2D-играх с видом сверху вниз, таких как Legend of Zelda, EarthBound и Stardew Valley. Но он без труда может работать в играх с боковой прокруткой, подобных Super Meat Boy или Limbo.

Конечная цель состоит в том, чтобы камера отслеживала игрока во время его прохождения через уровень, а затем останавливалась, когда край камеры достигает края карты. Игрок должен быть в состоянии идти до самого края, но камера останется на месте.

Геймплей из примера игры в «Разработка 2D игр с Unity», осень 2018, Apress

Исторически этот эффект достигался в Unity путем написания скриптов, но с Cinemachine мы можем создать его всего несколькими щелчками мыши, и код не нужен.

Требования

Необходимый уровень опыта, чтобы извлечь выгоду из этого поста, довольно минимален. Но вы должны быть знакомы с редактором Unity, объектами Unity GameObjects, камерой и сценами. Вы должны быть знакомы (или готовы научиться), как устанавливать пакеты Unity либо из Asset Store (← нажмите здесь, чтобы узнать, используете ли вы Unity 2017), либо через диспетчер пакетов (← или нажмите здесь, чтобы узнать, если вы используете Unity 2018).

Предыстория

Cinemachine — это мощный набор инструментов Unity для процедурных игровых камер, синематики и кат-сцен. Первоначально он был разработан Адамом Майхиллом (Adam Myhill) как платный ресурс в Unity Asset Store. В конечном итоге Unity приобрела Cinemachine, а Адам теперь работает в качестве их главы отдела синематики.

Cinemachine стал доступен через Asset Store для Unity 2017.1, вместе с релизом Timeline. В дальнейшем Cinemachine будет доступен через новый Unity Package Manager в Unity 2018.1.

Обратите внимание, что версии Unity 2017 по-прежнему могут использовать Cinemachine из Asset Store, но тот больше не обновляется и не будет содержать новых функций.

Начинаем

Если вы используете Unity 2017.X, скачайте и установите пакет Cinemachine из Asset Store. Вы также можете найти ссылку на пакет здесь. Если у вас Unity 2018.X, используйте новый менеджер пакетов для установки Cinemachine. Компания недавно объявила в своем блоге, что пакеты — это будущее Unity с точки зрения распространения новых функций.

меню cinemachine

Следующим шагом после установки Cinemachine будет создание Virtual Camera.

Что такое Virtual Camera? В документации к Cinemachine используется замечательная аналогия: виртуальную камеру можно представить как кинооператора. Он управляет настройками линз и положением главной камеры (Main Camera). Виртуальная камера сама по себе камерой не является. Ее можно считать управляющим устройством для главной камеры.

Cinemachine позволяет иметь несколько виртуальных камер для одной сцены. Такая свобода позволяет делать сложную съемку и монтаж. Эта свобода позволяет делать сложные снимки, срезы и сочетания. Без Cinemachine разработчик или оператор мог бы месяцами устанавливать и настраивать данные типы кадров вручную. Cinemachine даже допускает процедурный шум, так что любые два выстрела никогда не будут в точности одинаковыми, что дает более естественный эффект. Даже не собираюсь вдаваться в подробности возможностей Cinemachine.

Создание первой виртуальной камеры в сцене также создаст компонент под названием Cinemachine Brain. Это реальная связь между главной и виртуальной камерами в сцене. Cinemachine Brain будет отслеживать активную в настоящий момент виртуальную камеру и применять ее состояние к камере Unity.

метафора виртуальной камеры
Выше: Управление камерой в Unity. Каждую ночь одно и тоже.

Теперь мы изучили задействованные компоненты и готовы к конфигурации виртуальной камеры.

объект Виртуальная камера

Выберите игровой объект Virtual Camera с эзотерическим названием “CM vcam 1”. Можете переименовать его как угодно, потому что он обладает компонентом Transform

Когда выбрана виртуальная камеры, вы увидите в инспекторе следующие характеристики.

свойства виртуальной камеры

Вверху у нас есть имя GameObject, а слева от него флажок. Этот флажок очень полезно запомнить, поскольку он позволяет быстро включать и отключать GameObject. Мы не будем делать это в данном руководстве, но запомните трюк для будущих приключений с Cinemachine, когда захотите временно отключить виртуальную камеру во время исполнения.

установка цели преследования для виртуальной камеры
Свойство Follow позволяет устанавливать цель виртуальной камеры

Далее у нас есть свойство Follow. Перетащите объект Player, который вы хотите отслеживать, в свойство Follow. Unity будет извлекать ссылку на компонент Transform из объекта Player и использовать Transform в качестве цели Target для следования.

следовать камере за игроком
Установите объект Player в качестве цели Follow.

По умолчанию для параметра Body у виртуальной камеры выбран Transposer, который устанавливает фиксированную взаимосвязь с целью следования и регулирует положение камеры. Цель перемещается, и положение камеры перемещается вместе с ней. Существуют и другие варианты 2D Body, такие как Framing Transposer, но мы не будем рассматривать их в данной статье.

свойство Transposer

У вас будет возможность настроить нечто под названием Damping, которое определяет, насколько быстро камера движется за целью.

скорость расстояние до цели преследования
Настройки Damping и Offset
ретро гифка
Хороший совет.

Следующий кусок текста может быть (и когда-нибудь станет) самостоятельным постом в блоге. Камера в 2D-играх — это большая тема сама по себе, полная подводных камней, художественных требований и старого-доброго взгляда «все зависит от того, что вы на самом деле хотите достичь». Мы поговорим о том, как настроить размер камеры, в моей книге и, возможно, в будущем посте.

Пока все будет упрощено. Я лишь подскажу вам, что с разрешением экрана 1280 x 720, 32 пикселями на единицу (PPU) и артом, который хорошо выглядит при ширине 32 пикселя, нам нужен размер камеры 3,75.

Orthographic Size виртуальной камеры

Установите Orthographic Size 3,75.

Если сейчас вы нажмете воспроизведение, вы увидите, как камера движется за целью и все выглядит довольно сносно.

Но можно сделать лучше. Если вы посмотрите на камеру в вышеприведенном GIF, вы заметите, что та продолжает движение и отслеживание цели даже во время приближения к краю карты. А если вспомнить, то вначале мы хотели, чтобы камера останавливалась на определенном удалении от края, позволяя игроку заходить на самый край.

Другими словами, мы хотим запереть виртуальную камеру в определенном пространстве. Для этого мы используем компонент Cinemachine Confiner.

MFW
Я сказал wow…

В раскрывающемся меню «Расширения» в виртуальной камере выберите CinemachineConfiner.

cinemachine confiner
Запиратель должен запирать

Первым делом вы заметите предупреждение «Требуется ограничивающая форма». Об этом мы сейчас еще поговорим, но просто знайте, что для Cinemachine Confiner требуется либо Polygon Collider 2D, либо Composite Collider 2D. Края коллайдера представляют крайние положения виртуальной камеры.

предупреждение об установке границ области преследования

Прежде чем мы настроим коллайдеры, давайте посмотрим на представление Hierarchy для примера игры в этом посте:

виртуальная камера в cinemachine

У нас есть главная камера Main Camera и 3 тайловые карты Tilemaps(Вода, Земля, Кусты), которые используются в качестве слоев. Поскольку мы хотим ограничить камеру краем карты, имеет смысл добавить граничную логику, то есть Polygon Collider 2D, в карту Ground Tilemap.

добавление границ на карту поверхности
Добавьте в тайловую карту Polygon Collider 2D

Вы должны получить что-то наподобие представленного ниже. Размер добавленного коллайдера не важен, потому что мы настроим его на следующем шаге.

Polygon Collider 2D по умолчанию

Сначала нажмите кнопку Edit Collider в компоненте Polygon Collider 2D.

изменение границ коллайдера

Теперь отредактируйте границы вашего коллайдера. Вы можете руководствоваться своим чувством гармонии, чтобы расположить края там, где нравится. Если вы хотите, чтобы камера продолжала двигаться немного дальше от края земли, чтобы были видны несколько квадратов воды, оставьте небольшое пространство вокруг края земной массы.

Очень важно проверить, установлен ли флажок Is Trigger.

присутствие игрока в коллайдере
Следуйте инструкциям, чтобы не пострадали пиксели

Если вы забудете это сделать, игрок будет жестоко выкинут из коллайдера. С другой стороны… Может быть, вы хотите, чтобы это произошло. Я не могу знать, какую игру вы делаете.

Теперь нам нужно использовать этот коллайдер из тайловой карты земли в нашем Cinemachine Confiner.

Перетащите объект, содержащий коллайдер, в Bounding Shape 2D из Cinemachine Confiner.

окончательный вид в меню конфайнера

Когда все сказано и сделано, Confiner должен выглядеть как выше. Другим важным параметром является ограничение края экрана — Confine Screen Edges. В противном случае Confiner будет в основном игнорировать ограничивающую форму, которую мы только что установили. Этот параметр приказывает Orthographic Camera ограничивать края экрана «объемом» коллайдера.

Теперь нажмите воспроизведение и проведите игрока. Камера должна остановиться на краях коллайдера, в то время как игрок может продолжать идти прямо к краю карты.

Вот такой несложный, но часто используемый эффект может сильно повлиять на внешний вид вашей игры. В моей следующей книге «Разработка 2D-игр с Unity» вы узнаете, как еще больше настроить виртуальную камеру, Virtual Camera Body, а также программно через API настроить Cinemachine.


Если вы хотите узнать больше о разработке в Unity или для iOS, следуйте за Джаредом в Medium или в Твиттере

Его сайт https://www.jaredhalpern.com также содержит материалы по Unity и iOS, а книга «Developing 2D Games with Unity вышла осенью 2018 в издательстве Apress Publishing.

Этот пост охватывает материал из выступления, которое он дал на конференции Unity Users Group в Нью-Йорке 16 мая 2018 года. Слайды из выступления можно посмотреть здесь.

the end

Спасибо, что прочитали!

Источник: https://medium.com/@jaredehalpern/using-cinemachine-in-2d-for-unity-f35dd394326d

Понравилась статья? Поделиться с друзьями:
Пишет статьи о разработке игр. Не инди, — работает рендеринг-программистом в крупной ААА студии в Санкт-Петербурге. Большой поклонник игр Naughty Dog.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *