2D-игра в Unity: как настроить спрайты, камеру, физику и первый уровень
В 2D-проекте персонаж может оказаться слишком большим, фон перекрыть монеты, а столкновения не сработать. Эти ошибки относятся к разным системам. Если понимать, кто отвечает за размер, отображение и физику, исправлять их гораздо проще.
Разберём основу двухмерного проекта: выбор шаблона, импорт изображений, ортографическую камеру, порядок отрисовки, компоненты физики и подготовку уровня. После этой настройки можно уверенно переходить к управлению и правилам игры.
ТОП-5 курсов обучения Unity:
Что означает 2D в Unity
Двухмерная игра обычно использует изображения-спрайты и движение в плоскости X/Y. Объекты при этом остаются частью сцены Unity с Transform и координатой Z. Выбор 2D-режима не делает все вопросы глубины и камеры автоматическими.
Для физики используется отдельный набор компонентов: Rigidbody 2D, Collider 2D и события с суффиксом 2D. Их нужно согласовать между объектами. Обзор инструментов находится в официальном разделе 2D.
Выберите шаблон под графические задачи
Для простой игры без специального освещения достаточно базового 2D-проекта. Если нужны 2D Lights и возможности соответствующего Renderer, выберите настроенный шаблон Universal 2D или подготовьте URP с 2D Renderer.
Если учитесь по конкретному уроку, начните с указанного автором шаблона. Материал, созданный для одного конвейера, может не работать в другом без адаптации. Необходимость случайно менять рендеринг после импорта изображений обычно означает, что конфигурацию проекта стоит проверить раньше.
Для первого уровня создайте папки Scenes, Art, Prefabs и Scripts. Пока ресурсов мало, простой порядок делает понятным, какой файл является исходным изображением, а какой — игровым объектом.
Импортируйте изображения как спрайты
Поместите изображение в Assets, выберите его и откройте Inspector. Проверьте Texture Type: для обычного игрового спрайта нужен Sprite (2D and UI). У одного изображения используйте Single; для атласа с несколькими кадрами — Multiple и нарезку в Sprite Editor.
После изменения параметров нажимайте Apply. Затем перетащите нужный спрайт в сцену и проверьте Sprite Renderer. Если файл лежит в Project, это ещё не означает, что он размещён в уровне.
Для сторонних ресурсов дополнительно проверяются лицензия и совместимость. Весь путь от загрузки до размещения разобран в статье об ассетах.
Pixels Per Unit: договоритесь о размере мира
PPU показывает, сколько пикселей спрайта приходится на мировую единицу. При ширине изображения 100 пикселей и PPU 100 объект с единичным Transform Scale будет шириной одну единицу. При PPU 50 ширина станет двумя единицами.
Выберите последовательный масштаб. Например, клетка уровня равна одной единице, а тайл 32×32 пикселя импортируется с PPU 32. Тогда размер коллайдера, скорость персонажа и габариты карты можно обсуждать в понятных величинах.
Если часть графики подготовлена в другом разрешении, настройте её осознанно. Постоянное исправление масштаба случайными значениями Transform затрудняет дальнейшую работу с анимацией и физикой.
Настройте ортографическую камеру
У ортографической камеры размер объектов на экране не меняется из-за перспективного удаления. Для начала поставьте её перед плоскостью игры, например в (0, 0, -10), а игровые объекты — на Z = 0.
Параметр Orthographic Size задаёт половину видимой высоты мира. При Size 5 камера показывает по вертикали 10 мировых единиц. Видимая ширина зависит от соотношения сторон окна: на узком экране те же объекты могут оказаться вне боковых границ.
Поэтому проверяйте Game View в целевом соотношении сторон. Для мобильной игры отдельно проверяются портретный режим и область интерфейса. Если камере нужно следовать за игроком, настройте это после проверки неподвижного вида: так легче отличить проблему уровня от проблемы движения камеры.
Sorting Layer и Order in Layer: кто рисуется поверх
Начните с нескольких смысловых Sorting Layers: Background, World и Foreground. У Sprite Renderer выберите нужный слой, затем задайте Order in Layer для порядка внутри него. Подробности приоритетов находятся в руководстве по сортировке 2D.
Пример: фон относится к Background, персонаж и монеты — к World, верхняя часть декоративного навеса — к Foreground. Порядок становится понятным без постоянного изменения Z каждого объекта.
Sorting Layer и обычный Layer решают разные задачи. Первый связан с отображением спрайтов. Обычные слои применяются также для фильтров камеры и взаимодействий физики. Изменение Sorting Layer не отключает столкновения.
Для вида сверху может понадобиться сортировка по положению персонажа относительно объектов. Настраивайте её отдельно и проверяйте точку сортировки спрайта: большой рисунок с неподходящим pivot способен давать неожиданный порядок у границ объектов.
Физика: выберите поведение объекта
Стена или неподвижная платформа обычно получает Collider 2D. Игрок, движение которого должно учитывать физические столкновения, получает Rigidbody 2D и Collider 2D. Подбираемый предмет можно сделать триггером.
Для вида сверху Gravity Scale обычно равен 0. Для платформера гравитация участвует в падении и прыжках. Эти два типа управления не стоит смешивать в одном контроллере случайными правками.
Динамическое физическое тело двигайте согласованным способом. Если один код задаёт скорость Rigidbody 2D, а другой каждый кадр переносит Transform, они могут спорить о положении. Начните с одного владельца движения.
Столкновение и триггер выражают разные взаимодействия: первое может физически остановить объект, второй сообщает о входе в область. Для подбора монеты удобно событие триггера, для стены — обычный коллайдер.
Когда нужен Tilemap
Если уровень построен из повторяющихся клеток, Tilemap упрощает рисование карты и работу с тайлами. Пол, стены и декорации удобно разделять на разные карты. Так не приходится добавлять Collider к декоративным деталям, которые не должны мешать движению.
Для нескольких одиночных объектов ручное размещение спрайтов может быть проще. Переход к Tilemap оправдан, когда появляется сама задача редактирования тайлового уровня. Отдельная инструкция находится в статье о Tilemap.
Анимация: сначала проверьте кадры и состояние
Для покадровой анимации подготовьте спрайты одинакового масштаба и согласованный pivot. Затем создайте Animation Clip и назначьте переходы Animator. Если персонаж при анимации «прыгает» по размеру, сначала проверяйте исходные кадры и импорт.
Состояние движения должно приходить из контроллера или модели игры. Не используйте случайное название текущего изображения как единственный источник решения о том, бежит персонаж или стоит. Отдельные данные делают анимацию понятной для проверки.
Проверяйте читаемость и нагрузку
В маленьком масштабе персонаж, опасность и предмет должны различаться. Проверьте их в обычном размере Game View, а не только при увеличении спрайта в редакторе. Однородный фон способен спрятать важный объект даже при технически правильном отображении.
Двухмерная игра тоже может быть тяжёлой: большие прозрачные изображения перекрывают экран, много анимаций создают работу, а чрезмерные текстуры расходуют память. Определяйте причину через Profiler и проверяйте на целевом устройстве.
Минимальный порядок работы над первой 2D-игрой
- Подготовьте один экран с камерой и несколькими фигурами.
- Проверьте масштаб и порядок отображения.
- Добавьте движение и нужные коллайдеры.
- Сделайте цель, завершение попытки и перезапуск.
- Получите сборку и повторите проверку вне Editor.
- После этого заменяйте фигуры окончательной графикой и расширяйте уровень.
Такой порядок реализован в примере игры с монетами. Он позволяет сначала проверить игровой цикл, а затем тратить время на оформление уже работающей основы.