Unity 2D (4.x): Основы работы со спрайтами

Unity 2D — функционал, доступный начиная с версии 4.3. До этого 2D-разработка велась с использованием 3D-инструментов. Сейчас в Unity предусмотрена специализированная поддержка 2D, включающая спрайты и атласы, а также улучшенные средства анимации спрайтов.

Создание проекта и основные настройки

При создании нового проекта в современных версиях Unity предлагается выбрать между 2D и 3D режимами. Этот выбор влияет на предварительные настройки; например, при создании 2D-проекта автоматически настраивается ортографическая камера. Однако выбор режима не ограничивает использование 2D- или 3D-функций в проекте.

В редакторе сцены появилась кнопка переключения между 2D и 3D режимами.

Работа со спрайтами и атласами

Импорт текстур позволяет использовать их как обычные текстуры или спрайты. Спрайты делятся на два типа: Single (один спрайт на изображение) и Multiple (множество спрайтов на одном изображении). Для спрайтов Multiple предусмотрен удобный инструмент разбиения изображения на отдельные спрайты. Размер спрайта на экране регулируется через параметры пикселей на юнит.

Спрайты легко перетаскиваются на сцену. Для оптимизации производительности можно использовать Sprite Packer для объединения множества спрайтов в один атлас, сокращая количество вызовов отрисовки (draw calls). Sprite Packer включается в настройках проекта (Edit > Project Settings > Editor).

Компонент Sprite Renderer заменяет обычный Renderer и отвечает за отрисовку спрайта. Он позволяет указать спрайт, основной цвет (Main Color), материал (по умолчанию используется Sprite/Default, не использующий освещение), слой и порядок отрисовки. Z-координата не используется для сортировки спрайтов по глубине; используется система слоев. 3D-объекты, например, 3D-плоскость, можно использовать в сцене, и их отрисовка будет определяться Z-координатой, перекрывая спрайты.

Освещение и материалы спрайтов

По умолчанию спрайты не используют освещение. Для реализации освещения требуется создание материала с шейдером Sprite/Diffuse. Материал Sprite/Default оптимизирован и не создаёт дополнительных вызовов отрисовки, но не поддерживает освещение. Sprite/Diffuse, напротив, поддерживает освещение, но может приводить к проблемам при наложении спрайтов друг на друга, вызывая засветку и полупрозрачность.

Анимация спрайтов и производительность

Анимация спрайтов осуществляется с помощью компонента Animator и системы анимации Mecanim. Процесс создания анимации похож на работу с 3D-объектами: отрезки анимации выделяются на таймлайне и добавляются в анимацию. Скорость анимации регулируется изменением количества семплов. Mecanim автоматически создаёт state machine. Для больших проектов с большим количеством объектов на мобильных платформах рекомендуется использовать Legacy анимации, так как Mecanim может испытывать проблемы с производительностью.

Коллайдеры и физика

Для 2D-объектов используются коллайдеры с припиской 2D (например, BoxCollider2D, CircleCollider2D). Добавлен PolygonCollider2D, который, теоретически, должен автоматически генерировать коллайдер по форме спрайта.

Raycasting и обработка касаний

Пример кода (ниже) демонстрирует использование Raycasting для определения места попадания касания экрана. Метод Camera.ScreenPointToRay используется для получения луча из точки касания. Метод Physics2D.Raycast возвращает информацию о столкновении. В Unity 2D используются модифицированные методы работы с физикой и Raycasting по сравнению с 3D-режимом. Physics2D.Raycast теперь возвращает RaycastHit2D, а не принимает RaycastHit как выходной параметр.

Сортировка частиц и слои

При добавлении частиц (Particle System) на сцену, они могут отображаться за другими объектами. Для решения этой проблемы используется скрипт SetParticleSortingLayer, который позволяет задать слой отрисовки для частиц. Слой частиц нельзя установить через редактор.

Навигация и альтернативные решения

NavMesh не рекомендуется для 2D-проектов, так как требует поворота сцены на 90 градусов. Это может потребовать доработки проекта и переворота всех объектов. Рекомендуется использовать альтернативные решения для навигации.

В этом обзоре рассмотрены основные аспекты работы с 2D в Unity 4.x. Упомянуты новые возможности и особенности, которые необходимо учитывать при разработке 2D-игр.

Что будем искать? Например,программа