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

Для чего используется Addressable?

2.3 Middle🔥 191 комментариев
#Оптимизация#Ресурсы и ассеты

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

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

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

Для чего используется Addressable?

Addressable Asset System (система адресуемых ассетов) — это официальная система управления ассетами в Unity, предназначенная для загрузки и выгрузки ресурсов во время выполнения игры. Она пришла на смену устаревшим подходам, таким как Resources и AssetBundles, предлагая более гибкий, производительный и удобный для разработки способ работы с контентом.

Ключевые цели и решаемые проблемы

Основные задачи, для которых используется Addressable:

  1. Управление жизненным циклом памяти. Позволяет явно загружать и выгружать ассеты по мере необходимости, предотвращая утечки памяти и неконтролируемый рост потребления RAM.
  2. Упрощение разработки. Позволяет ссылаться на любой ассет в проекте (префаб, текстуру, сцену, аудио) с помощью простой строки-адреса, а не через жесткие ссылки в сцене или скрипте. Это уменьшает связность кода и облегчает его поддержку.
  3. Поддержка контента "по запросу" (on-demand). Критически важна для мобильных и браузерных проектов, где размер установочного пакета (APK/IPA) строго ограничен. Основной контент поставляется в пакете установки, а дополнительный (уровни, обновления, события) — скачивается с сервера по мере необходимости.
  4. Кеширование и обновление. Система автоматически управляет кешированием загруженных удаленно ассетов на устройстве игрока и позволяет проверять наличие их обновленных версий на сервере без необходимости перевыпуска всего клиента (технология Content Delivery Network или собственная инфраструктура).
  5. Оптимизация сборки и доставки. Автоматически группирует ассеты в AssetBundles под капотом, основываясь на их зависимости друг от друга и заданных разработчиком группах. Это позволяет:
    *   Сократить дублирование ассетов в разных бандлах.
    *   Создавать отдельные, маленькие бандлы для часто обновляемого контента.
    *   Гибко настраивать, какие ассеты попадут в сборку для конкретной платформы (например, текстуры высокого разрешения только для ПК).

Практический пример использования

Представим, что в игре есть магазин с 100 скинами для оружия. Загружать все текстуры и модели в память при старте — расточительно. С Addressable это решается элегантно:

  1. Все скины помечаются как Addressable с адресами, например, "Skin_Shotgun_Dragon", "Skin_Rifle_Gold".
  2. В коде UI магазина для отображения конкретного скина используется асинхронная загрузка.
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class SkinLoader : MonoBehaviour
{
    public string skinAddress; // Например, "Skin_Shotgun_Dragon"
    private AsyncOperationHandle<GameObject> _handle;

    async void LoadSkin()
    {
        // Асинхронная загрузка префаба скина по его адресу
        _handle = Addressables.LoadAssetAsync<GameObject>(skinAddress);

        // Ожидание завершения загрузки
        GameObject skinPrefab = await _handle.Task;

        if (skinPrefab != null && this != null)
        {
            Instantiate(skinPrefab, transform);
        }
    }

    void OnDestroy()
    {
        // Важно! Выгрузка ассета, когда он больше не нужен
        if (_handle.IsValid())
        {
            Addressables.Release(_handle);
        }
    }
}
  1. При сборке Unity создаст отдельный бандл для скинов. Этот бандл можно вынести на сервер и скачивать только при первом входе игрока в магазин, а не включать в изначальный размер приложения.

Сравнение с альтернативами

  • Resources: Все ассеты в папке Resources попадают в один монолитный файл, всегда загружаются в память при старте и не могут быть выгружены. Это приводит к долгой загрузке и неэффективному использованию памяти. Addressable лишена этих недостатков.
  • Прямые ссылки в сцене (Public поля): Создают жесткую зависимость, мешают переиспользованию кода и требуют ручного управления зависимостями при сборке бандлов. Addressable предоставляет уровень абстракции.

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

Для чего используется Addressable? | PrepBro