Unity 6.3
0 онлайн 106 гостей 3 в системе
Вход
Ассеты и медиа Шаг 93 из 148

Загрузка ассетов из AssetBundles

Чтобы загрузить ресурсы из AssetBundle, необходимо сначала загрузить сам AssetBundle, а затем загрузить ресурсы из него.

Загрузка AssetBundles

Вы можете использовать следующий APIs для загрузки AssetBundles:

  • Статические методы Load у AssetBundle класс, например AssetBundle.LoadFromFile. У этого класса есть целый ряд методов загрузки — в зависимости от расположения AssetBundle и от того, хотите ли вы загружать его синхронно или асинхронно.
  • Поддержка UnityWebRequest для AssetBundles, например UnityWebRequestAssetBundle.GetAssetBundle.

См. API для этих классов в отношении всего диапазона AssetBundle доступные методы загрузки и примеры использования.

Погрузка ассетов

Как только AssetBundle загружается, вы можете использовать AssetBundle класс, чтобы загружать из него отдельные ассеты, как показано ниже.

Используйте LoadAsset для синхронной загрузки одного ассета, например корня GameObject из префаб:

GameObject gameObject = loadedAssetBundle.LoadAsset<GameObject>(assetName);

Используйте LoadAllAssets для загрузки всех ассетов следующим образом:

Unity.Object[] objectArray = loadedAssetBundle.LoadAllAssets();

Это возвращает массив со всеми корневыми объектами каждого ассета.

Методы в предыдущих фрагментах возвращают либо тип загружаемого объекта, либо массив объектов. Асинхронные аналоги этих методов возвращают вместо этого AssetBundleRequest. Перед доступом к ресурсу необходимо дождаться завершения этой операции.

Чтобы загрузить один ресурс асинхронно:

AssetBundleRequest request = loadedAssetBundleObject.LoadAssetAsync<GameObject>(assetName);
yield return request; // or await request;
var loadedAsset = request.asset;

Чтобы загрузить все ресурсы асинхронно:

AssetBundleRequest request = loadedAssetBundle.LoadAllAssetsAsync();
yield return request; // or await request;
var loadedAssets = request.allAssets;

Для получения дополнительной информации и полного примера кода см. ссылку AssetBundle API.

Загрузка манифестов AssetBundle

Вы можете загрузить манифест AssetBundle в экземпляр AssetBundleManifest класс, чтобы получить сведения о собранных AssetBundle: данные о зависимостях, хеши и сведения о вариантах.

Это особенно полезно при управлении зависимостями между AssetBundles. Объект манифеста позволяет динамически находить и загружать зависимости, так что вам не нужно жестко кодировать все имена AssetBundle и их отношения явно в вашем коде.

Дополнительные сведения и пример кода см. в Обработка зависимостей между AssetBundles и.

Управление загруженным AssetBundles

Пакет Addressables упрощает процесс управления AssetBundles, зависимостями и ассетами. Для ручного управления, понимание правильной загрузки и выгрузки AssetBundle является критически важным, чтобы избежать дублирования памяти или отсутствия объектов.

Рекомендуемые стратегии разгрузки

Функция AssetBundle.Unload удаляет из памяти заголовок AssetBundle и связанные с ним структуры, при этом булевая формула определяет, будут ли загруженные объекты также выгружаться.

Используйте AssetBundle.Unload(true) для предотвращения дублирования объектов. Например:

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

Если вы должны использовать Unload(false), нежелательные объекты могут быть разгружены только одним из следующих способов:

  • Устранение ссылок: Удалить все ссылки на объект и вызвать Resources.UnloadUnusedAssets.
  • Неаддитивная загрузка сцены: Загрузить новую сцену неаддитивно, чтобы уничтожить текущие объекты сцены, автоматически вызывая Resources.UnloadUnusedAssets.

Для подробной информации об использовании памяти во время загрузки AssetBundle и конкретных сценариях, когда весь AssetBundles может быть загружен в RAM, см. Оптимизация AssetBundles.

Распространение AssetBundles

Вы можете распространять AssetBundles следующими способами:

  • Найдите файлы в папке StreamingAssets и включите их в сборку Player.
  • Разместить файлы с помощью веб-службы, такой как UnityОблачная доставка контента и использование UnityWebRequestAssetBundle скачать их.
  • Написать пользовательский код загрузки и установки. Этот подход требует больше работы по разработке, но позволяет контролировать такие аспекты, как сжатие, кэширование, патчи и подтверждение перед загрузкой файла с помощью Unity APIs.

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