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

Что такое Asset Bundle и Addressables в Unity? Для чего они используются?

1.0 Junior🔥 142 комментариев
#Unity Core

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

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

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

Asset Bundle и Addressables в Unity: система управления ресурсами

Общее определение и цель

Asset Bundle и Addressables — это две технологии в Unity, предназначенные для динамической загрузки ресурсов (модели, текстуры, аудио, префабы) во время выполнения игры. Их основная цель — управление памятью, организация контента и поддержка таких функций, как DLC (дополнительный контент), патчинг и ресурс-ориентированный дизайн.


Asset Bundle: классическая система

Asset Bundle — это более старый, но фундаментальный механизм. Это архивный файл, созданный из коллекции assets (ресурсов) Unity, который можно загрузить по требованию.

Как создаются и используются:

// Пример создания Asset Bundle (обычно через редактор или скрипт)
BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.Android);

// Пример загрузки Asset Bundle во время игры
using UnityEngine.Networking;

async void LoadBundle(string url, string assetName)
{
    UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
    await request.SendWebRequest();
    
    AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
    GameObject prefab = bundle.LoadAsset<GameObject>(assetName);
    Instantiate(prefab);
    bundle.Unload(false); // Освобождение памяти
}

Основные применения Asset Bundle:

  • Разделение контента: Отделение больших ресурсов (например, уровней) от основного приложения для уменьшения начального размера.
  • Патчинг: Замена или добавление ресурсов без перекомпиляции всего проекта.
  • Поддержка DLC: Возможность добавлять новые уровни, персонажей или предметы после выпуска игры.
  • Управление памятью: Загрузка ресурсов только когда они нужны и их выгрузка для освобождения памяти.

Проблемы Asset Bundle:

  • Сложность управления: Нужно самостоятельно управлять зависимостями между бандлами (если префаб ссылается на текстуру из другого бандла).
  • Отсутствие централизованной системы: Требуется писать свой код для загрузки, кэширования и отслеживания ссылок.
  • Риск утечки памяти: Неправильная выгрузка может привести к удержанию ресурсов в памяти.

Addressables: современная абстракция

Addressables — это более высокоуровневая система, введенная Unity как эволюция Asset Bundle. Она предоставляет единый интерфейс для загрузки ресурсов по их уникальному адресу (строке-идентификатору), абстрагируя низкоуровневые детали (хранится ли ресурс локально, в Asset Bundle или на удаленном сервере).

Как настроить и использовать:

// В редакторе ресурс помечается как Addressable и получает уникальный адрес (например, "Characters/Knight").

// Пример загрузки Addressable ресурса во время игры
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

async void LoadAddressableAsset(string assetAddress)
{
    AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(assetAddress);
    await handle.Task;
    
    if (handle.Status == AsyncOperationStatus.Succeeded)
    {
        GameObject obj = handle.Result;
        Instantiate(obj);
        // Addressables автоматически управляет зависимостями и ссылками
        // Выгрузка производится через Addressables.Release(handle);
    }
}

Ключевые преимущества Addressables:

  • Упрощенное управление зависимостями: Система автоматически загружает все связанные ресурсы (материалы, текстуры).
  • Централизованная система: GUI в редакторе для группировки, анализа и назначения адресов.
  • Гибкость размещения: Ресурс может быть локальным, в локальном бандле, или на удаленном CDN — код загрузки не меняется.
  • Встроенный кэшинг и управление памятью: Автоматическое отслеживание ссылок, предотвращение дублирования загрузок.
  • Поддержка асинхронной загрузки: Современный API на основе AsyncOperationHandle и задач (Task).

Сравнение и выбор технологии

КритерийAsset BundleAddressables
Уровень сложностиНизкий уровень, много ручной работыВысокий уровень, автоматизация
Управление зависимостямиРучное, сложноеАвтоматическое
Интеграция с редакторомМинимальнаяПолноценная GUI система
Поддержка удаленного контентаВозможна, но требует реализацииВстроенная, простая конфигурация
Рекомендуемый случайПростые проекты, кастомные решенияБольшие проекты, live-операции, DLC

Для чего они используются в современных проектах?

  1. Оптимизация размера приложения: Основной апк содержит только базовые ресурсы, остальные загружаются позже.
  2. Live-обновления и DLC: Добавление нового контента без выпуска новой версии приложения.
  3. Управление памятью на мобильных устройствах: Критически важно для избежания crashes из-за недостатка памяти.
  4. Реализация систем с большим количеством контента: Например, игры с сотнями персонажей или уровней, где загрузка всего сразу невозможна.
  5. A/B тестирование контента: Загрузка разных вариантов ресурсов (например, UI кожи) с сервера.

Addressables сегодня является рекомендуемой стандартной системой для большинства проектов, особенно тех, которые планируют поддерживать live-операции или имеют сложную структуру ресурсов. Asset Bundle остается полезным для специфических, низкоуровневых задач или в случаях, где требуется максимальный контроль над процессом. Обе технологии позволяют Unity-проектам масштабироваться и адаптироваться к требованиям современного игрового развития.