← Назад к вопросам

Как уменьшил размер Build на прошлом пректе?

1.0 Junior🔥 72 комментариев
#Другое

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Оптимизация размера билда в Unity: практический опыт

На прошлом проекте (мобильная гипер-казуальная игра) мы уменьшили размер финального APK с 217 МБ до 89 МБ (снижение на ~59%) за счет комплексного подхода. Основные стратегии:

Анализ и профилирование

Сначала мы использовали Unity Build Report Tool и анализировали Android APK Analyzer, чтобы определить основные "пожиратели" размера:

<!-- Пример структуры анализа через Unity Editor -->
Assets/Textures: 78 МБ (36%)
Assets/Audio: 52 МБ (24%)
Assets/Animations: 31 МБ (14%)
StreamingAssets: 28 МБ (13%)
Managed Code: 18 МБ (8%)
Other: 10 МБ (5%)

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

Текстуры составляли самую большую категорию, поэтому мы предприняли:

  • Конвертация всех UI-текстур в формат ASTC 6x6 (для Android) и ASTC 4x4 (для iOS)
  • Использование Texture2DArray для похожих материалов (например, скины персонажей)
  • Реализация динамической подгрузки текстур через Addressables для контента, не требующегося на старте
  • Уменьшение максимального размера спрайтов с 2048x2048 до 1024x1024 где это было визуально приемлемо
// Пример настройки импорта текстур через Editor Script
[MenuItem("Assets/Optimize Textures")]
static void OptimizeSelectedTextures()
{
    foreach (var obj in Selection.objects)
    {
        var path = AssetDatabase.GetAssetPath(obj);
        var importer = AssetImporter.GetAtPath(path) as TextureImporter;
        
        if (importer != null)
        {
            importer.maxTextureSize = 1024;
            importer.textureCompression = TextureImporterCompression.Compressed;
            importer.crunchedCompression = true;
            importer.compressionQuality = 50;
            AssetDatabase.ImportAsset(path);
        }
    }
}

Аудио компрессия

Аудиофайлы оптимизировали агрессивно:

  • Конвертировали все WAV в OGG/Vorbis с качеством 0.7
  • Для фоновой музыки использовали потоковую загрузку (LoadType: Streaming)
  • Удалили неиспользуемые дубликаты звуков через AssetBundle Browser
  • Настроили частоту дискретизации 22050 Гц для звуков окружения

Управление зависимостями и кодом

  • Удалили неиспользуемые плагины и SDK (Firebase Analytics остался, но в минимальной конфигурации)
  • Использовали IL2CPP с код-стерайпингом (Managed Stripping Level: High)
  • Настроили разделение на базовый и контентный AssetBundles:
    • Base (~15 МБ): ядро игры, основные механики
    • Content (~74 МБ): уровни, персонажи, локации (подгружаются по требованию)

Архитектурные изменения

  • Перешли на Addressable Assets System для динамической загрузки
  • Реализовали прогрессивную загрузку контента (первые 3 уровня в базовом билде, остальные - по мере прохождения)
  • Использовали Runtime Asset Bundles для локализационных данных

Дополнительные техники

  • Сжатие Animation Clips через оптимизацию ключевых кадров
  • Уменьшение полигональности 3D-моделей для LOD-версий
  • Исключение ненужных данных из префабов (пустые скрипты, deprecated компоненты)
  • Использование спрайт-атласов для UI элементов

Результаты

После внедрения всех оптимизаций:

  • Initial APK: 89 МБ (против 217 МБ)
  • Первое впечатление пользователя улучшилось (быстрая установка)
  • Коэффициент установок увеличился на 23% (по данным магазинов)
  • Потребление памяти в runtime снизилось на ~18%

Ключевой инсайт: оптимизация размера билда — это не разовая акция, а процесс, интегрированный в конвейер разработки. Мы внедрили автоматические проверки в CI/CD, которые отслеживают рост размера артефактов и предупреждают команду о превышении лимитов.

Как уменьшил размер Build на прошлом пректе? | PrepBro