Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Unity : asset, management

Чем Addressables лучше чистых AssetBundle?

Этот вопрос оценивает понимание эволюции системы управления ресурсами в Unity и преимуществ новой системы над ручным управлением ассет-бандлами.

Короткий ответ

Addressables — это система поверх AssetBundles, которая автоматизирует их сложные аспекты. Она избавляет от необходимости вручную управлять зависимостями ассетов (например, когда одна текстура используется несколькими моделями), упрощает загрузку и выгрузку через "адреса" (строковые имена) и предоставляет встроенные инструменты для управления жизненным циклом ресурсов. В отличие от чистых AssetBundles, Addressables минимизирует риски ошибок и утечек памяти.

Длинный ответ

Addressables — это система управления ресурсами в Unity, которая использует AssetBundles "под капотом", но предоставляет более высокоуровневый и безопасный API.

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

  1. Автоматическое управление зависимостями

    • Проблема AssetBundles: Если префаб А из бандла 1 использует материал из бандла 2, вы должны вручную загрузить оба бандла и убедиться, что связи между ассетами не потерялись.

    • Решение Addressables: Система автоматически отслеживает и загружает все зависимости ассета. Вы запрашиваете один объект, а Addressables сама подгружает всё необходимое.

  2. Упрощенная система загрузки по "адресу"

    • Вместо работы с путями к файлам бандлов и именами объектов внутри них, вы работаете с простыми строковыми адресами (например, "Characters/Knight").

    • Это делает код чище и позволяет менять физическое расположение ассета без изменения кода.

  3. Встроенное управление памятью

    • Addressables предоставляет четкую модель ссылок (AsyncOperationHandle), которая помогает отслеживать, сколько раз ресурс был загружен, и автоматически выгружать его, когда он больше не нужен.

    • Это значительно снижает риск утечек памяти по сравнению с ручным управлением выгрузкой AssetBundles.

  4. Расширенные возможности

    • Разные стратегии загрузки: Возможность иметь локальные и удаленные (с CDN) ассеты.

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

    • Инструменты анализа: Встроенные окна для анализа размера бандлов и их зависимостей.

Сравнение кода

csharp

// Загрузка с помощью Addressables (просто и безопасно)
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>("MyCharacter");
yield return handle;
GameObject character = handle.Result;
// ...
Addressables.Release(handle); // Освобождение, когда объект больше не нужен.

// Загрузка с помощью чистых AssetBundles (сложно и много кода)
AssetBundle myBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "mybundle"));
GameObject character = myBundle.LoadAsset<GameObject>("MyCharacter");
// Нужно где-то хранить ссылку на myBundle, чтобы выгрузить его, и не забыть про зависимости!
// ...
myBundle.Unload(true); // Легко вызвать слишком рано или, наоборот, забыть.

Вывод: Addressables следует использовать вместо чистых AssetBundles для большинства задач динамической загрузки ресурсов, так как она надежнее, удобнее и обладает большим набором встроенных функций. Чистые AssetBundles могут быть полезны для очень специфических низкоуровневых оптимизаций, где требуется полный ручной контроль.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Unity

    Unity

Ключевые слова

#asset

#management

Подпишись на Game Developer в телеграм