Синемашина для 2D: Советы и рекомендации

Вы давно работаете над системой камер для своей 2D-игры и мечтаете о чем-то вроде Cinemachine для 2D? Не многие знают о нем, но он уже есть! В этом блоге вы найдете несколько советов о том, как получить максимальную отдачу от Cinemachine, и как этот инструмент может значительно ускорить разработку вашей 2D-игры. Продолжайте читать, чтобы узнать больше о виртуальных камерах Cinemachine, конфинерах и многом другом, предназначенном для использования в 2D-играх.
Вы можете получить Cinemachine из нашего менеджера пакетов в Unity, если вы используете версию выше 2018.1.0b7.
Это можно сделать, перейдя в меню Window > Package Manager > All и выбрав Cinemachine.

С помощью Cinemachine довольно просто создать свою систему камер для 2D-среды. Давайте рассмотрим создание виртуальной камеры для 2D.
1. Создайте 2D виртуальную камеру, перейдя в строку меню и выбрав Cinemachine > Create 2D Camera. Это позволит создать виртуальную камеру, настроенную на 2D-среду. Если это ваша первая виртуальная камера в сцене, она также добавит компонент Cinemachine Brain к вашей основной камере.

2. Перетащите игрока из иерархии на цель Follow.
3. Убедитесь, что в LookAt Target ничего нет, если там что-то есть, выделите это и нажмите backspace или delete, чтобы удалить ссылку.
4. Настройте параметры "Ортографический размер" и "Тело" в соответствии с вашими потребностями.
Главное, что вы заметите между 2D Virtual Camera и 3D Virtual Camera, - это тот факт, что мы используем кадровый транспозер. Этот специальный транспозер будет следовать за целью в плоскости X-Y камеры и останавливать ее вращение. Чтобы транспозер кадрирования работал корректно, необходимо убедиться, что виртуальная камера 'LookAt target' имеет значение null. Еще одно замечание: в 2D-играх используется ортографический вид, поэтому при создании виртуальной камеры вам нужно будет изменить проекцию на ортографическую в камере Cinemachine Brain Camera вашей сцены.

Важно помнить, что при работе с Cinemachine не стоит пытаться заставить одну камеру делать все. Вместо этого вы можете расположить вокруг сцены различные "виртуальные камеры" и смешивать их между собой с помощью Cinemachine Brain. Такое смешивание может произойти, если у игрока мало здоровья, он вошел в определенную зону или любой другой сценарий, который вы можете себе представить и который требует изменения кадрирования камеры или постобработки. Вы можете настроить параметры смешивания на Cinemachine Brain в зависимости от того, каким вы хотите видеть изображение.
Посмотрите видео ниже, чтобы узнать, как настроить виртуальную камеру в режиме игры.
Еще одна классная вещь, которую мы можем сделать с помощью Cinemachine, - это использовать граничную рамку, чтобы ограничить виртуальную камеру определенной областью. Эта функция доступна в разделе расширений виртуальной камеры. Ниже описаны шаги по созданию этого эффекта.
1. Установите пограничную рамку для нашего уровня. Это будет использоваться для ограничения уровня. Это делается с помощью:
- Создайте пустой объект 'GameObject'.
- Добавьте 'CompositeCollider2D' к объекту GameObject.
- Установите для 'CompositeCollider2D's Geometry Type значение Polygons.
- Установите для объекта GameObject 'Rigidbody' значение Static.
- Добавьте 'BoxCollider2D' к объекту GameObject.
- Настройте 'BoxCollider2D' в соответствии с вашим уровнем.
- Установите для 'BoxCollider2D' значение "Используется композитом".

2. Добавьте расширение Confiner Extension в виртуальную камеру.
3. Перетащите границу, которую мы создали ранее, в поле Bounding Shape 2D Box.
4. Определите, должна ли камера ограничиваться краями экрана, это можно настроить с помощью флажка "Ограничивать края экрана".
5. Наконец, мы можем решить, хотим ли мы, чтобы Конфинер имел демпфирование. Это позволит камере плавно перекрыть край ограничивающего коллайдера. Если вам не нужен этот эффект, установите значение Damping Time равным 0.
Результаты этого смотрите ниже:
Видеопример:
Еще одна классная функция от Cinemachine, которую мы можем использовать в 2D, - это групповая камера. Эта камера позволяет нам создать целевую группу, на которую будет смотреть наша камера. Групповая камера полезна, если вы делаете cutscene, где нужно показать что-то важное, хотите, чтобы в каждом кадре было больше одного объекта, или если вы хотите создать локальную многопользовательскую игру в 2D.
В Cinemachine это можно сделать следующим образом:
1. Создайте новую 2D виртуальную камеру
2. Создайте новый объект GameObject в сцене

3. Добавить компонент > Cinemachine > 'Целевая группа Cinemachine'
4. Добавьте игровые объекты, на которых вы хотите сфокусироваться, в целевую группу
5. Перетащите группу целей в свойство Virtual Cameras 'Follow Target' в Инспекторе.
6. Настройте минимальный и максимальный ортографический размер, который в терминах камеры определяет "зум" камеры, в соответствии с вашими предпочтениями.
7. Определите тип группового обрамления. Горизонтальный" учитывает только горизонтальный размер кадра при кадрировании камеры. 'Vertical' учитывает только вертикальный размер рамки при кадрировании. Тип "Горизонтальный и вертикальный" учитывает оба измерения.
Группа целей" - это компонент Cinemachine, который позволяет просматривать несколько целей на одной виртуальной камере. Она регулирует размер камеры, чтобы обеспечить видимость целей в зависимости от веса. Например, если все цели имеют вес 1, целевая группа будет следить за тем, чтобы все цели были видны.
Вот пример групповой камеры, которая фокусируется на игроке и сундуке.

В Cinemachine V2.2 мы добавили новое расширение Impulse Extension. Это расширение позволяет создавать эффекты дрожания камеры без создания какого-либо кода. Impulse Extension можно добавить в качестве расширения к вашей виртуальной камере. Я расскажу вам, как добавить это в сцену:
- Создайте 2D виртуальную камеру с помощью опции меню Cinemachine и настройте ее на слежение за целью.
- Нажмите Добавить расширение > Cinemachine Impulse Listener.
- В прослушивателе импульсов убедитесь, что установлен флажок "Использовать двумерное расстояние".
- Маска канала позволяет отфильтровать импульсы, которые вы хотите прослушать. В этом примере мы будем использовать канал по умолчанию.
- Выберите игровой объект, от которого будет отправлен импульс. В этом примере мы будем использовать мяч, который подпрыгивает. Каждый раз, когда он ударяется о пол, он будет передавать импульсный сигнал на канале по умолчанию, а наш слушатель импульсов будет его принимать.
- Нажмите Add Component и найдите 'Cinemachine Collision Impulse Source'.
- В разделе "Форма сигнала" мы выберем сигнал для переменной Raw Signal. Это профиль 'NoiseSettings'. Мы можем использовать стандартные или создать свои собственные.
- Создайте новый профиль "NoiseSettings", нажав на значок шестеренки и выбрав "New Noise Setting". Сохраните это в своем проекте.
- Мы можем выбрать, чтобы шум влиял на Position и Rotation или только на один из них. Поскольку это 2D-игра, мы будем влиять на положения по X и Y и вращение по Z. Хороший шумовой профиль непредсказуем. Единственное, что мы хотим сделать с шумом, - это повторить некоторые природные случайности. Для этого можно использовать несколько слоев с разной детализацией.
- Если бы мы хотели, то могли бы добавить коэффициент усиления к частоте и амплитуде, которые применяются профилем шума.
- В разделе "Пространственный диапазон" мы настроим "Расстояние рассеивания". Это определяет, на каком расстоянии мы больше не чувствуем импульса. Пока установите значение 25.
При желании мы могли бы настроить режим рассеивания, чтобы изменить тип затухания. Есть и другие настройки, но пока это все, что нам нужно.
Результат вы можете увидеть ниже:

Итак, подведем итог: теперь мы знаем, как:
- Получите Cinemachine с помощью менеджера пакетов
- Создание 2D виртуальной камеры
- Ограничьте виртуальную камеру двумерным пространством
- Создайте виртуальную камеру для слежения за несколькими целями
- Настройка модуля Impulse для добавления дрожания камеры
Надеюсь, вам понравилась эта статья и теперь вы готовы использовать Cinemachine в своем следующем 2D-проекте! Если вы хотите быть в курсе новостей Cinemachine? Присоединяйтесь к обсуждению на нашем форуме.
