Камеры в Unity: перспектива, 2D-кадр, слежение и причины чёрного экрана
Объект виден в Scene, но отсутствует в Game. Персонаж двигается плавно, а изображение дрожит. Вторая камера перекрывает первую. Чтобы разобраться, нужно разделить положение камеры, её проекцию, фильтры видимости и способ обновления.
Рассмотрим настройки Camera, сделаем простое слежение для 2D и определим, когда полезен Cinemachine. Примеры рассчитаны на Unity 6.
ТОП-5 курсов обучения Unity:
Perspective и Orthographic
Perspective создаёт перспективное уменьшение: дальние объекты выглядят меньше. Field of View задаёт угол обзора в соответствующем режиме камеры. Положение и угол обзора вместе определяют кадр, но изменяют изображение по-разному.
Orthographic сохраняет масштаб независимо от расстояния до камеры. Это часто удобно в 2D и некоторых стратегиях. Orthographic Size задаёт половину вертикальной величины видимой области: при Size 5 высота составляет 10 мировых единиц. Ширина зависит от соотношения сторон.
Для обычной 2D-сцены в плоскости XY поставьте Camera в (0, 0, −10), Rotation (0, 0, 0), Orthographic и Size 5. Спрайты около Z=0 окажутся перед камерой, смотрящей вдоль положительной Z.
Clip planes и Culling Mask
Near и Far ограничивают диапазон расстояний, в котором камера рисует геометрию. Если объект оказался за границей, увеличение размера его изображения не поможет. Слишком широкий диапазон также может ухудшать точность глубины в некоторых конфигурациях.
Culling Mask выбирает обычные Layers видимых объектов. Sorting Layer — отдельный механизм порядка для соответствующих Renderer. Объект может иметь правильную сортировку спрайта и одновременно быть исключённым из mask камеры.
В Inspector проверьте также активность Camera, viewport и Target Texture. Если задана RenderTexture, изображение может выводиться туда вместо ожидаемого экрана. Базовые свойства описаны в справке Camera для Built-in; дополнительные настройки зависят от конвейера.
Простое слежение в 2D
Создайте файл FollowCamera2D.cs и прикрепите к Main Camera. Назначьте Transform персонажа в Target. Оставьте Offset (0, 0, −10), Smooth Time 0.15 и описанные выше настройки ортографической камеры.
Камера следует по X/Y, сохраняя плоскость Z через offset. В Start она сразу принимает исходное положение, затем плавно приближается к цели в LateUpdate. SmoothDamp использует накопленное значение velocity; это состояние сглаживания, а не скорость Rigidbody.
В Play перемещайте персонажа или изменяйте его X/Y в Inspector. Камера должна следовать без вращения. Пример не ограничивает края уровня и не предотвращает показ пустой области. Такие правила добавляйте отдельно. Поведение сглаживания описано в API SmoothDamp.
Почему камера дрожит
Физический персонаж может обновляться по fixed-шагам, а изображение — с другой частотой. Камера видит дискретные позиции. Для подходящего Rigidbody или Rigidbody2D проверьте interpolation и согласуйте момент обновления камеры.
Не заставляйте два компонента управлять одной камерой одновременно. Если Cinemachine обновляет Transform, дополнительный FollowCamera2D может перезаписывать результат. Аналогичная проблема возникает при одновременном физическом и ручном движении персонажа.
Сначала уберите сглаживание и проверьте стабильную позицию цели. Затем включайте один выбранный способ сглаживания. Несколько фильтров подряд могут создать неприятное запаздывание.
Cinemachine для более сложной постановки
Cinemachine предоставляет инструменты следования, композиции и переходов. В версии 3 используются Cinemachine Camera и Cinemachine Brain, который управляет результирующей Unity Camera. Рецепты для Cinemachine 2 могут иметь другие компоненты и API.
Установите совместимый пакет, создайте подходящую Cinemachine Camera, назначьте tracking target и выберите способ позиционирования. Проверьте Brain у основной Camera. Сначала добейтесь простого следования, затем добавляйте ограничение области, blending и дополнительные камеры.
Документация версии 3.1 находится в руководстве Cinemachine Camera. Не переносите названия настроек между крупными версиями без проверки.
Несколько камер и интерфейс
В Built-in порядок и очистка настраиваются свойствами камеры. В URP есть Base и Overlay, а совместное изображение может строиться через camera stacking. Это отдельный механизм; изменение старого Depth не заменяет все настройки URP.
Overlay в URP используется вместе с Base в соответствующем стеке. Типы описаны в документации URP. Учитывайте поддерживаемый Renderer и стоимость дополнительной отрисовки.
Для Screen Space — Overlay Canvas камера интерфейса не требуется. Для других режимов Canvas проверьте назначение камеры и плоскости. В обычном одиночном приложении избегайте нескольких одновременно активных Audio Listener.
Порядок проверки чёрного экрана
- Есть ли активная Camera, которая выводит в нужный экран?
- Смотрит ли она на содержимое сцены и находятся ли объекты перед ней?
- Попадают ли объекты между Near и Far?
- Включены ли их Layers в Culling Mask?
- Активны ли Renderer и совместимы ли материалы?
- Не выводится ли изображение в RenderTexture или другой viewport?
- Не перекрывает ли кадр другая камера или полноэкранный UI?
Tag MainCamera нужен для некоторых способов поиска, например Camera.main, но сам по себе не является условием отрисовки Camera. Проверяйте реальную причину отсутствия изображения.
Основы сцены и переходов есть в статье о сценах, а работа с 2D-объектами — в руководстве 2D.