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

Как уменьшишь размер билда?

2.0 Middle🔥 181 комментариев
#Unity Core#Оптимизация#Ресурсы и ассеты

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

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

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

Стратегии оптимизации размера билда в Unity

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

Анализ текущего состояния билда

Первым делом я всегда анализирую Build Report, который предоставляет детальную информацию о вкладе каждого ресурса в итоговый размер. Это помогает выявить "тяжеловесов":

// Пример проверки размера текстур при импорте
void CheckTextureSettings(Texture2D texture)
{
    if (texture.width > 2048 || texture.height > 2048)
    {
        Debug.LogWarning($"Текстура {texture.name} слишком большая: {texture.width}x{texture.height}");
    }
}

Основные направления оптимизации

1. Оптимизация графических ресурсов

  • Текстуры: Использую соответствующие максимальные размеры (1024x1024 для мобильных, 2048x2048 для ПК), включаю сжатие ASTC для iOS/Android или ETC2, уменьшаю битность (RGB вместо RGBA где возможно)
  • Модели: Оптимизирую полигональные сетки, удаляю неиспользуемые UV-карты, скелеты и анимации
  • Шейдеры: Минимизирую количество разных шейдеров, удаляю неиспользуемые варианты из сборки

2. Аудиооптимизация

  • Конвертирую аудио в оптимальные форматы: Vorbis (.ogg) для музыки, ADPCM для коротких звуков
  • Сильно уменьшаю битрейт для фоновой музыки (96-128 kbps достаточно)
  • Для мобильных платформ использую настройку Force To Mono для не-позиционных звуков
// Пример скрипта для автоматической проверки аудио настроек
#if UNITY_EDITOR
[MenuItem("Tools/Check Audio Settings")]
static void CheckAudioSettings()
{
    foreach (var audioClip in Selection.GetFiltered<AudioClip>(SelectionMode.Assets))
    {
        var importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(audioClip)) as AudioImporter;
        if (importer != null && importer.loadInBackground)
        {
            Debug.Log($"Аудио {audioClip.name} загружается в фоне - это может быть неоптимально");
        }
    }
}
#endif

3. Настройки сборки Unity

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

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

  • Минимизирую использование сторонних плагинов и ассетов
  • Удаляю неиспользуемые пакеты из Package Manager
  • Для UI использую только необходимые компоненты TextMeshPro
  • Анализирую и удаляю неиспользуемые namespace в скриптах

5. Адресная система и Asset Bundles

  • Внедряю систему Addressable Assets для разделения контента на обязательный и дополнительный
  • Разбиваю игру на базовый билд и загружаемые по требованию Asset Bundles
  • Реализую динамическую загрузку уровней и контента

Практические техники

Анализ и автоматизация:

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

  • Скрипты для поиска текстур без сжатия
  • Проверка моделей с чрезмерным количеством полигонов
  • Анализ префабов на наличие дублирующихся ресурсов

Работа с кодом:

// Удаление неиспользуемых using-директив
// ДО:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // Не используется

// ПОСЛЕ:
using System.Collections.Generic;
using UnityEngine;

Профилирование билда:

Использую инструменты вроде Build Report Tool и Unity Build Size Analyzer для визуализации вклада каждого ресурса.

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

  1. Локализация: Разделяю ресурсы локализации на отдельные пакеты
  2. Конфигурации сборки: Создаю разные билды для разных регионов или устройств
  3. Сжатие билда: Включаю все доступные опции сжатия в настройках плеера
  4. Минимизация качества по умолчанию: Начинаю с низких настроек графики, добавляя улучшения как опции

Непрерывный мониторинг

Важнейший аспект - интеграция проверки размера билда в CI/CD пайплайн. Я настраиваю автоматические оповещения, если размер билда превышает заданные лимиты, что позволяет обнаруживать проблемы на ранних этапах разработки.

В результате такого комплексного подхода мне удается сокращать размер билдов на 40-70% без потери качества игрового опыта, что существенно улучшает показатели конверсии и удержания пользователей, особенно в мобильном секторе.

Как уменьшишь размер билда? | PrepBro