This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Оптимизация размера игры

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

iOS и Android

Apple и Google установили ограничения на размер приложений при загрузке через мобильные сети (в отличие от Wi-Fi). Для Android это ограничение составляет 200 МБ для приложений, опубликованных с использованием app bundles. Для iOS пользователи получат предупреждение, если размер приложения превышает 200 МБ, но они всё равно смогут его загрузить.

Согласно исследованию 2017 года: «Каждое увеличение APK на 6 МБ снижает коэффициент конверсии установки на 1%.» (источник)

HTML5

Poki и многие другие веб-платформы рекомендуют, чтобы начальная загрузка не превышала 5 МБ.

Facebook рекомендует, чтобы Facebook Instant Game запускалась менее чем за 5 секунд, желательно — за 3 секунды. Это не означает строго заданный размер, но речь идёт об объёмах до ~20 МБ.

Игровые рекламы с демо-геймплеем обычно ограничены объёмом от 2 до 5 МБ в зависимости от рекламной сети.

Стратегии оптимизации размера

Оптимизировать размер приложения можно двумя способами: уменьшив размер самого движка и/или уменьшив размер игровых ресурсов.

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

Defold создаёт дерево зависимостей при сборке и упаковке приложения. Система сборки начинает с коллекции начальной загрузки, указанной в game.project, и просматривает все связанные коллекции, игровые объекты и компоненты, чтобы определить список используемых ресурсов. В итоговый пакет попадут только эти ресурсы. Всё, что не связано напрямую, будет исключено. Несмотря на это, как разработчику вам следует учитывать, какие ресурсы включаются в итоговое приложение и каков их размер — как по отдельности, так и в совокупности.

Оптимизация размера движка

Быстрый способ уменьшить размер движка — исключить из него функциональность, которая вам не нужна. Это можно сделать с помощью файла манифеста приложения, в котором можно отключить ненужные компоненты движка. Примеры:

  • Physics — если вы не используете физику Box2D или Bullet3D, рекомендуется исключить соответствующие модули
  • LiveUpdate — если не используется, его можно отключить
  • Image load — если вы не загружаете изображения вручную через image.load()
  • BasisU — если в игре немного текстур, попробуйте собрать игру без BasisU и без сжатия текстур, и сравните размер. В таких случаях может быть выгоднее отказаться от транскодера и сжатия, чтобы уменьшить размер бинарника и снизить использование памяти.

Оптимизация ресурсов

Наибольший эффект даёт уменьшение размера звуков и текстур.

Оптимизация звуков

Defold поддерживает форматы:

  • .wav
  • .ogg
  • .opus

Файлы звуков должны использовать 16-битные сэмплы. Декодеры Defold масштабируют частоту дискретизации под устройство воспроизведения.

Короткие звуки, например эффекты, обычно сильнее сжимаются. Музыкальные треки — меньше. Defold не сжимает аудио, разработчик должен оптимизировать звуки самостоятельно.

Вы можете использовать аудиоредакторы или консольные инструменты (например, ffmpeg) для снижения качества или конвертации. Также рассмотрите возможность перевода стерео в моно, чтобы уменьшить размер.

Оптимизация текстур

Начните с проверки размеров изображений, добавляемых в атлас или используемых как tilesource. Изображения не должны быть больше, чем это действительно необходимо. Импорт больших картинок и масштабирование внутри игры — пустая трата памяти. Используйте редакторы изображений, чтобы уменьшить размеры до нужных. Для фонов допустимо использовать маленькие изображения с масштабированием вверх. Также проверьте итоговый размер атласов — он зависит от платформы и GPU:

Этот пост на форуме содержит советы по пакетному изменению размеров изображений.

  • HTML5: Web3D Survey
  • iOS:
    • iPad: 2048x2048
    • iPhone 4: 2048x2048
    • iPad 2, 3, Mini, Air, Pro: 4096x4096
    • iPhone 4s, 5, 6+, 6s: 4096x4096
  • Android: максимальный размер текстур сильно варьируется, но в целом все современные устройства поддерживают минимум 4096x4096

Если атлас слишком велик, его можно разбить на несколько меньших, использовать мультистраничные атласы или масштабировать весь атлас с помощью профиля текстур. Система профилей в Defold позволяет не только масштабировать атласы, но и применять алгоритмы сжатия для уменьшения их размера на диске. Подробнее о профилях текстур читайте в руководстве. Если вы не уверены, с чего начать, используйте следующие настройки в качестве отправной точки:

  • mipmaps: false
  • premultiply_alpha: true
  • format: TEXTURE_FORMAT_RGBA
  • compression_level: NORMAL
  • compression_type: COMPRESSION_TYPE_BASIS_UASTC

Дополнительные советы по оптимизации текстур можно найти в этом форуме.

Оптимизация шрифтов

Размер шрифта будет меньше, если явно указать нужные символы в поле Characters вместо использования опции All Chars.

Исключение контента для загрузки по требованию

Другой способ уменьшения начального размера приложения — это исключение части контента из основного пакета и его загрузка по требованию. Для этого используйте систему Live Update.

Вы можете исключить целые уровни, скины, персонажей и т.п. Организуйте загрузку так, чтобы в начальном наборе ресурсов были только те, что нужны для запуска и первого уровня. Используйте collection proxies или factories с включённой галочкой “Exclude”. Делите ресурсы по прогрессу игрока. Подробнее читайте в руководстве по Live Update.

Оптимизация размера на Android

Сборки для Android должны поддерживать 32-битные и 64-битные архитектуры. При создании сборки для Android можно указать, какие архитектуры включать:

Подпись Android сборки

Google Play поддерживает несколько APK на выпуск, что позволяет разделить сборку по архитектурам и уменьшить итоговый размер каждого APK.

Также вы можете использовать дополнительные файлы APK Expansion в сочетании с контентом Live Update, используя расширение APKX.