
Оптимизация производительности 2D-игр с Unity Tilemap
Эти советы лучше всего подойдут пользователям, имеющим некоторый опыт работы с инструментами 2D в Unity. Еще один отличный ресурс для профессиональных создателей, разрабатывающих коммерческие 2D-игры с помощью Unity, — это наша электронная книга, 2D-арт игр, освещение и анимация.
Если вы новичок в разработке 2D-игр с помощью Unity, начните с руководства по 2D для новых пользователей.

Общие советы по производительности
Вот несколько общих советов по производительности, которые стоит учитывать:
- Думайте о производительности ваших активов (данных) с самого начала. Если эти элементы неэффективны, вы сможете сделать мало для оптимизации вашего кода позже.
- Профиль на вашем самом низком доступном целевом устройстве. Используйте Профайлер Unity на протяжении всего процесса разработки проекта, а также инструменты профилирования, специфичные для платформы, такие как Xcode для устройств iOS.
- Не используйте более трети доступной оперативной памяти на вашем самом низком целевом устройстве. Это гарантирует, что ваш контент будет хорошо работать на широком спектре мобильных устройств (дешевые Android-телефоны по-прежнему остаются самыми популярными на мобильных рынках).
Для получения дополнительных советов по оптимизации 2D, смотрите эти ресурсы:

Краткое введение в Tilemap
Компонент Tilemap позволяет эффективно создавать 2D уровни, используя плитки на наложенной сетке. Он состоит из нескольких элементов, включая:
Вы можете создавать 2D уровни, используя комбинацию спрайтов и игровых объектов, и контролировать такие свойства, как слои сортировки, коллайдеры тайловой карты и анимированные плитки, среди прочего. Вы также можете рисовать Квадратные, Шестиугольные и Изометрические спрайты.
Рисуйте свои уровни с помощью Tilemap, чтобы компонент коллайдера Tilemap 2D автоматически генерировал коллайдер вокруг плиток (на основе настройки типа коллайдера плитки), когда он применяется к игровому объекту Tilemap.
Давайте посмотрим на прирост производительности, который вы получаете с помощью Tilemap по сравнению с сценами, построенными с использованием спрайтов.

Меньше GameObjects
Использование Tilemap уменьшает время загрузки, а также использование памяти и ЦП.
Если вы ранее разрабатывали 2D-игры и приложения, то знаете, что в вашей игре может оказаться большое количество спрайтов, каждый из которых является отдельным GameObject. На каждом из этих GameObject спрайтов есть компоненты, включая Transform и Renderer, которые занимают память. Другие компоненты, такие как Colliders, имеют накладные расходы на ЦП.
В сравнении, Tilemap использует один Renderer для всей карты и всех ее плиток. Это приводит к меньшим накладным расходам, так как он обрабатывает только свои собственные структуры данных, в отличие от наличия множества структур данных в памяти.
Меньшее количество GameObject приводит к более чистой иерархии, что означает, что вам не придется прокручивать сложный список в поисках нужного.

Меньший размер сцены
Tilemap Unity уменьшает размер сцены. Меньшее количество GameObject и компонентов означает меньше объектов для загрузки с диска, десериализации и хранения в памяти во время выполнения.
Загрузка сцен в Unity — это двухэтапный процесс: Сначала данные считываются с диска. Это процесс, который часто занимает больше всего времени в вашей игре, особенно на устройствах Android. Затем данные десериализуются. Десериализация — это процесс преобразования данных из одного формата в другой. По сути, это восстанавливает данные и объекты из сохраненного состояния. Unity выполняет сериализацию внутренне, так что каждый раз, когда он загружает файл сцены в редакторе и во время выполнения, он берет эти сохраненные файлы и превращает их в объекты Unity.
На изображении выше вы можете увидеть сравнение между двумя сериализованными файлами сцены, один из которых использует Tilemaps, а другой воссоздан с использованием спрайтов. Спасибо Pixel Reign за эту сцену из их игры Robbie Swifthand.
Справа находится раздел сериализованного Tilemap, состоящий из четырех тайлов. Правила для всех тайлов, включая тип используемых тайлов, установлены в верхней части Tilemap. Каждый из последующих тайлов указывает свойства, такие как используемый тайл и его позиция.
Слева изображен один спрайт с компонентами Transform и Sprite Renderer.
Из этого сравнения ясно, сколько работы необходимо для сериализации спрайтов. В частности, сцена с использованием спрайтов имеет 370 000 строк в своем файле, в то время как сцена с Tilemap имеет 30 000 строк. Меньшие размеры проектов и репозиториев приводят к более быстрым временам итерации и более плавным рабочим процессам.
Если вы хотите просмотреть свои сцены в текстовом файле, перейдите в Настройки редактора, включите Режим сериализации ассетов, нажмите на Force Text и откройте файл сцены .unity в Текстовом редакторе.

Меньше коллайдеров
Вы можете объединить коллайдер Tilemap 2D с композитным коллайдером. Это не только уменьшит количество коллайдеров и спрайтов, но и повысит эффективность вашего производства, так как не нужно будет каждый раз заново строить сложные формы столкновений при внесении изменений. Композитный коллайдер заботится об этом.

Сниженное потребление ресурсов рендеринга
Как уже упоминалось ранее, у каждого спрайта есть компонент Sprite Renderer, и наличие большего количества рендеров требует больше работы от ЦП, включая время на подготовку отсечения и очистку для рендеринга. Используя Tilemaps, вы получите меньше компонентов рендерера, тем самым сэкономив работу ЦП.
Сниженные затраты на отсечение
Более одной камеры в вашей сцене означает больше рендеров. Это увеличивает стоимость отсечения.
В режиме просмотра камеры существует стоимость отсечения для каждого рендерера и каждой камеры. Каждая камера должна выполнять проверки отсечения для каждого компонента рендерера в сцене, поэтому, если у вас есть многокамерная установка для вашей игры, использование Tilemaps поможет вам снизить эту стоимость.

Меньше вызовов пакетирования
Сборка — это объединение всей геометрии, которую можно нарисовать, без выполнения другого вызова SetPass. Рендерер тайловой карты объединяет геометрию спрайтов на основе их положения. В результате рендерер тайловой карты отправляет меньше мешей с большей геометрией в конвейер рендеринга, по сравнению с рендерером спрайтов, который отправляет больше мешей с меньшей геометрией. Как показывает таблица в следующем разделе, сцена на основе тайловой карты имеет значительно меньшее количество сборок.
Вы можете проверить сборку, посмотрев на панель статистики в вашем игровом представлении. Вы также можете использовать Отладчик кадров, чтобы определить, почему элементы не собираются.

Более высокая частота кадров
Чтобы достичь 60 fps, каждый кадр может занимать максимум 16 мс для рендеринга. Когда образец сцены был профилирован на старом iPhone 7, версия на основе спрайтов имела 244 мс на кадр, в то время как версия на основе тайловой карты имела 13 мс на кадр.
Наконец, использование ОЗУ составило 1,1 ГБ для сцены на основе спрайтов, что слишком много для телефонов Android начального уровня, например. Сцена на основе тайловой карты использовала всего 21 МБ ОЗУ, что делает ее подходящей для работы на более широком диапазоне мобильных устройств.
Сравнение выше показывает явную разницу в производительности между двумя сценами.

Упакуйте спрайты с помощью Sprite Atlas
Атлас спрайтов — это инструмент редактора, который позволяет вам упаковывать ваши спрайты в текстуры для оптимизации использования памяти и вызовов отрисовки. Создайте актив, атлас спрайтов, который включает все спрайты, используемые в вашей тайловой карте, чтобы их можно было объединить рендерером тайловой карты всего в один вызов отрисовки (при условии, что все спрайты помещаются в одну текстуру).
Больше ресурсов для создателей 2D-игр
Улучшите свои 2D навыки: Наш список чтения блога предоставляет полезные советы по разработке 2D игр.
2D Игровая графика, анимация и освещение для художников: Эта бесплатная электронная книга предоставляет лучшие практики для максимального использования инструментов 2D в Unity.
Обзор инструментов 2D: Посмотрите наш удобный обзор того, что Unity предлагает разработчикам 2D.
Процедурные шаблоны с Tilemaps – Часть I и Часть II: Добавьте разнообразия в вашу игру с помощью процедурной генерации. Эти посты объясняют некоторые алгоритмы, которые вы можете использовать с Tilemap и RuleTile.