Unity "уменьшение размера файла на устройстве" Часть 1

Когда игра подходит к релизу, ее объем занимаемой памяти сильно превышает желаемый. Если говорить с точки зрения пользователя, то они тоже не любят, когда приложение весит очень много. Это может отпугнуть как при первом скачивании, так и при очистке телефона, когда нужно будет освободить место.

В этой статье будут рассмотрены основные способы оптимизации игры на Unity по уменьшению размера файла на устройстве. В основном статья подходит для мобильных платформ, так как на ПК игры весом в 100Гб уже стали нормой. Многие методы и настройки будут нацелены именно на мобильные устройства в частности Android.

1) Самый простой и порой очевидный способ «Удалить все не используемые ассеты»

Когда разработка идет полным ходом, в игру добавляется много разных ассетов. Но мало кто занимается удалением не используемых. А ведь это не только уменьшает занимаемое место будущей игры, но и очищает структуру проекта.

2) Выбрать метод сжатия

File > Build settings > Compression method

Unity "уменьшение размера файла на устройстве" Часть 1

На Android сжатие по умолчанию — ZIP, что дает несколько лучшие результаты сжатия, чем LZ4HC. Однако ZIP-данные распаковываются медленнее. Что означает, что простая игра может запускать несколько минут.

Если есть способ уменьшить размер файла другим способом, то лучше выбрать LZ4HC. Метод высокой степенью сжатия, который медленнее собирается, но дает лучшие результаты при сборке релиза.

3) Выбрать метод сжатия текстур

File > Build settings

Большинство современных графических процессоров Android поддерживают формат сжатия ASTC. Если вам нужна поддержка старых устройств, то все графические процессоры, работающие под управлением Vulkan, Metal или OpenGL ES 3.0, поддерживают формат ETC2.

Для еще более старых устройств обычно доступен только формат ETC. Недостатком является отсутствие прямой поддержки альфа-канала (прозрачности изображения) .

Unity "уменьшение размера файла на устройстве" Часть 1

4) Выбрать целевую архитектуру

Player settings > other settings > Соnfiguration > target architectures

Unity "уменьшение размера файла на устройстве" Часть 1

Если вы не планируете выпускать игру под старые платформы, то можно выбрать ARM64. ARM7 старые телефоны, ARM64 новые телефоны.

Chrome OS это операционная система, используемая на устройствах Chromebook. Для обычных телефонов и планшетов включать поддержку этой платформы не обязательно.

5) Разделить файловые сборки по архитектурам

Player settings > other settings > Configuration > target architectures > Split APKs by target architecture (Experimental)

Unity "уменьшение размера файла на устройстве" Часть 1

Не работает в большинстве магазинов приложений. Настройка нацелена на Google play. Благодаря ей в магазине будет хранится несколько сборочных файлов для разных архитектур. Так сборочные файлы будут меньше требовать памяти на устройстве и будут более оптимизированы.

6) Поиск не используемых скриптов

Player settings > other settings > Optimization > Manager scripting level = high

Unity "уменьшение размера файла на устройстве" Часть 1

Эта настройка будет автоматический искать не используемый код. Таким образом будет произведена оптимизация пространства на устройстве и производительность приложения

7) Выбор графического api

Player settings > other settings > graphics api’s= opengles2

Unity "уменьшение размера файла на устройстве" Часть 1

Если игра не требует высокого уровня графики, вы можете выбрать графический api полегче (opengles2).

8) Переключиться на промежуточный с++

Player settings > other settings > Configuration > Scripting backend = ILL2CPP

Unity "уменьшение размера файла на устройстве" Часть 1

В Unity есть 2 типа компиляции. Mono – скрипты компилируются по запросу. И ILL2CPP – скрипты компилируются перед запуском. Mono подходит для разработки и тестов. Так как здесь требуется мгновенная компиляция. ILL2CPP – подходит для релиза, когда игра уже готова к выпуску.

9) Выбрать способ компиляции

Player settings > other settings > Configuration > C++ compiling config = Release

Debug –подходит для доработки исправления багов, если игра уже выпущена и перенастраивать нет времени.

Release – компиляция для выпускаемой сборки. Происходит намного дольше. Но в результате сборка будет хорошо оптимизована и уменьшена в размерах.

Master – Улучшенный метод компиляции. В маленьких проектах будет слабый эффект. В больших проектах работает лучше. Требует очень большого времени компиляции.

10) Enable Roslyn Analyzers

Player settings > other settings > Configuration > 10) Enable Roslyn Analyzers = false

Unity "уменьшение размера файла на устройстве" Часть 1

Отключите этот параметр для компиляции без DLL анализатора Roslyn, которые могут присутствовать в вашем проекте.

В данной статье были представлены самые простые способы уменьшения размера игровой сборки. После перенастройки вашего проекта, его размер может уменьшить в 2 раза. В следующих статьях будут описаны другие методы.

3737
21 комментарий

Со стриппингом лучше обращаться очень аккуратно, особенно если часть контента лежит в скачиваемых бандлах. Юнити просто может например стрипануть код для ненужных по мнению движка компонентов, и как результат в скачанном ассете этот компонент просто не будет работать ни в каком виде. В общем, стоит использовать только если иначе никак, или если есть возможность заранее протестировать работоспособность билда от и до, так как проблемы могут вылезти в самых неожиданных местах.

Папки Resources надо чистить очень внимательно, создатели сторонних плагинов часто не парятся и кидают по 300мб всякой фигни в эту папку, что неимоверно раздувает билд. При этом эта папка может быть запрятана очень глубоко в иерархии проекта, так что сходу ее и не найдешь.

Сжатие ETC и OpenGL ES2 использовать уже нет смысла, девайсы без поддержки OpenGL3 и ETC2 это дикие динозавры, которые в любом случае игру не потянут, да и актуальная версия движка андроид ниже 4.4 уже просто не поддерживает.

Еще бывает полезно распаковать получившийся билд ассет риппером и глянуть что именно попало в него. Нередко вылазят сюрпризы, когда из-за одной забытой ссылки в проект лезет большая куча лишнего мусора, который совершенно не нужен.

4
Ответить

Можно даже не распаковывать. В полном логе билда есть список всех упакованных ассетов. Потом можно найти причину их попадания в билд через guid ссылки

Ответить

Полезно и актуально. Ставлю лакйосик

жаль не раскрыл тему про addressables

3
Ответить

Спасибо за отзыв. Это первая часть. В отдельных статьях я буду разбирать и другие способы уменьшения размера сборки

1
Ответить

поддерживаю, про addressables тоже интересно посмотреть :)

Ответить

Комментарий недоступен

Ответить

Все что лежит в папках Resources попадает в билд не зависимо от наличия или отсутсвия ссылок

1
Ответить