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

Как оптимизируешь размер билда в Unity?

2.0 Middle🔥 132 комментариев
#Unity Core

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

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

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

Оптимизация размера билда в Unity

Оптимизация размера билда — критически важная задача, особенно для мобильных платформ и регионов с медленным интернетом. Вот комплексный подход, который я применяю на проектах.

1. Анализ текущего билда

Первым делом необходимо понять, что именно занимает место:

  • Использование Build Report Tool или стандартного Build Summary для анализа размеров ассетов
  • Проверка Editor Log после сборки (раздел "Textures", "Meshes", "Animations")
  • Анализ пакета ресурсов (AssetBundles) если они используются

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

Текстуры — главный "пожиратель" места:

// Пример проверки настроек импорта текстур
// Убедитесь, что Max Size соответствует платформе
// Отключите Generate Mip Maps для UI-элементов
// Используйте правильный Compression формат:
// - Android: ETC2 (для RGBA) или ASTC
// - iOS: PVRTC или ASTC
// - Windows: DXT5/DXT1

Конкретные действия:

  • Использование текстурного атласа для UI и 2D-спрайтов
  • Правильный выбор разрешения текстур (1024x1024 вместо 2048x2048 где возможно)
  • Применение Crunch Compression для текстур с качеством 50-70%
  • Удаление неиспользуемых каналов (Alpha channel) где он не нужен

3. Оптимизация аудио

Аудиофайлы могут занимать неожиданно много места:

  • Конвертация в оптимальные форматы: OGG Vorbis для фоновой музыки, ADPCM для звуковых эффектов
  • Настройка Quality сжатия (примерно 0.3-0.5 для мобильных платформ)
  • Для голосовых дорожек — использование моно-аудио вместо стерео

4. Управление включением ассетов в билд

Технические приёмы:

  • Использование Addressables или AssetBundles для разделения основного билда и дополнительного контента
  • Настройка Asset Labels для контроля включения ресурсов в разные билды (например, отдельно для Android и iOS)
  • Регулярная проверка "Always Included Shaders" в Graphics Settings — удаление неиспользуемых
// Пример использования Addressables для динамической загрузки
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

async void LoadAssetOnlyWhenNeeded()
{
    AsyncOperationHandle<GameObject> handle = 
        Addressables.LoadAssetAsync<GameObject>("MyAsset");
    await handle.Task;
    
    // Использование ассета
    Instantiate(handle.Result);
    
    // Выгрузка когда не нужен
    Addressables.Release(handle);
}

5. Настройки Player Settings

Ключевые параметры в Project Settings → Player:

  • Strip Engine Code: Включение для удаления неиспользуемых компонентов Unity
  • Managed Stripping Level: High для Release-билдов
  • Scripting Backend: IL2CPP вместо Mono для лучшей оптимизации (но увеличивает время сборки)
  • API Compatibility Level: .NET Standard 2.0 вместо .NET 4.x где возможно

6. Оптимизация кода и скриптов

  • Удаление неиспользуемых using-директив и пространств имён
  • Минимизация зависимостей от сторонних плагинов
  • Использование Assembly Definitions для разделения кода и контроля референсов

7. Дополнительные стратегии

  • Разделение билдов по архитектурам (armeabi-v7a, arm64-v8a) через Android App Bundle
  • Применение LZ4 или LZ4HC сжатия для AssetBundles вместо LZMA
  • Регулярная очистка проекта от неиспользуемых ассетов через AssetDatabase
  • Использование Texture Streaming для больших миров

Практический workflow:

  1. Базовый билд — замер начального размера
  2. Итеративная оптимизация — применение одной техники, проверка результата
  3. Профилирование — проверка, не пострадала ли производительность
  4. Документирование — ведение отчёта об оптимизациях для команды

Важный нюанс: Оптимизация размера — это баланс между качеством контента и ограничениями платформы. Всегда тестируйте билд на целевых устройствах после значительных изменений, чтобы убедиться в сохранении приемлемого качества визуалов и производительности.

Как оптимизируешь размер билда в Unity? | PrepBro