title: Оптимизация размера игры в Defold
Размер вашей игры может быть критически важным фактором успеха на таких платформах, как веб и мобильные устройства, в то время как на ПК и консолях это менее важно из-за доступности и дешевизны дискового пространства.
Apple и Google установили ограничения на размер приложений при загрузке через мобильные сети (в отличие от Wi-Fi). Для Android это ограничение составляет 200 МБ для приложений, опубликованных с использованием app bundles. Для iOS пользователи получат предупреждение, если размер приложения превышает 200 МБ, но они всё равно смогут его загрузить.
::: sidenote Согласно исследованию 2017 года: «Каждое увеличение APK на 6 МБ снижает коэффициент конверсии установки на 1%.» (источник) :::
Poki и многие другие веб-платформы рекомендуют, чтобы начальная загрузка не превышала 5 МБ.
Facebook рекомендует, чтобы Facebook Instant Game запускалась менее чем за 5 секунд, желательно — за 3 секунды. Это не означает строго заданный размер, но речь идёт об объёмах до ~20 МБ.
Игровые рекламы с демо-геймплеем обычно ограничены объёмом от 2 до 5 МБ в зависимости от рекламной сети.
Оптимизировать размер приложения можно двумя способами: уменьшив размер самого движка и/или уменьшив размер игровых ресурсов.
Чтобы лучше понять, из чего складывается размер вашего приложения, вы можете сгенерировать отчёт о сборке. Обычно основной объём занимают звуки и графика.
::: important Defold создаёт дерево зависимостей при сборке и упаковке приложения. Система сборки начинает с коллекции начальной загрузки, указанной в game.project, и просматривает все связанные коллекции, игровые объекты и компоненты, чтобы определить список используемых ресурсов. В итоговый пакет попадут только эти ресурсы. Всё, что не связано напрямую, будет исключено. Несмотря на это, как разработчику вам следует учитывать, какие ресурсы включаются в итоговое приложение и каков их размер — как по отдельности, так и в совокупности. :::
Быстрый способ уменьшить размер движка — исключить из него функциональность, которая вам не нужна. Это можно сделать с помощью файла манифеста приложения, в котором можно отключить ненужные компоненты движка. Примеры:
image.load()
Наибольший эффект даёт уменьшение размера звуков и текстур.
Defold поддерживает форматы:
Файлы звуков должны использовать 16-битные сэмплы. Декодеры Defold масштабируют частоту дискретизации под устройство воспроизведения.
Короткие звуки, например эффекты, обычно сильнее сжимаются. Музыкальные треки — меньше. Defold не сжимает аудио, разработчик должен оптимизировать звуки самостоятельно.
Вы можете использовать аудиоредакторы или консольные инструменты (например, ffmpeg) для снижения качества или конвертации. Также рассмотрите возможность перевода стерео в моно, чтобы уменьшить размер.
Начните с проверки размеров изображений, добавляемых в атлас или используемых как tilesource. Изображения не должны быть больше, чем это действительно необходимо. Импорт больших картинок и масштабирование внутри игры — пустая трата памяти. Используйте редакторы изображений, чтобы уменьшить размеры до нужных. Для фонов допустимо использовать маленькие изображения с масштабированием вверх. Также проверьте итоговый размер атласов — он зависит от платформы и GPU:
::: sidenote Этот пост на форуме содержит советы по пакетному изменению размеров изображений. :::
Если атлас слишком велик, его можно разбить на несколько меньших, использовать мультистраничные атласы или масштабировать весь атлас с помощью профиля текстур. Система профилей в Defold позволяет не только масштабировать атласы, но и применять алгоритмы сжатия для уменьшения их размера на диске. Подробнее о профилях текстур читайте в руководстве. Если вы не уверены, с чего начать, используйте следующие настройки в качестве отправной точки:
::: sidenote Дополнительные советы по оптимизации текстур можно найти в этом форуме. :::
Размер шрифта будет меньше, если явно указать нужные символы в поле Characters вместо использования опции All Chars.
Другой способ уменьшения начального размера приложения — это исключение части контента из основного пакета и его загрузка по требованию. Для этого используйте систему Live Update.
Вы можете исключить целые уровни, скины, персонажей и т.п. Организуйте загрузку так, чтобы в начальном наборе ресурсов были только те, что нужны для запуска и первого уровня. Используйте collection proxies или factories с включённой галочкой "Exclude". Делите ресурсы по прогрессу игрока. Подробнее читайте в руководстве по Live Update.
Сборки для Android должны поддерживать 32-битные и 64-битные архитектуры. При создании сборки для Android можно указать, какие архитектуры включать:
Google Play поддерживает несколько APK на выпуск, что позволяет разделить сборку по архитектурам и уменьшить итоговый размер каждого APK.
Также вы можете использовать дополнительные файлы APK Expansion в сочетании с контентом Live Update, используя расширение APKX.