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

AssetBundle кэширование

Встроенная дисковая система кэширования Unity предотвращает избыточные загрузки, храня AssetBundles, загруженный через UnityWebRequestAssetBundle.

Unity преобразует AssetBundles в кэше в LZ4 для оптимальной производительности. Caching.compressionEnabled является false, AssetBundles хранятся в несжатом виде. Используйте Caching класс, чтобы управлять кэшированными AssetBundle — например, очищать кэш или проверять его наличие.

Если вы используете веб-платформу, обратитесь к Веб-кэширование для получения дополнительной информации о том, как обрабатывать кэширование.

Если вы используете UnityWebRequestAssetBundle.GetAssetBundle, только те, которые принимают аргументы Hash128 или uint version используют встроенный кэш.

При загрузке без кэширования, Unity загружает AssetBundle в файл памяти, а затем загружает его. Если загруженный файл находится в формате LZMA, то Unity пересжимает его в файл памяти в формате LZ4 и загружает его вместо этого.

Местоположение кеша AssetBundle

Локальный кэш AssetBundle существует в корневой папке (например, Application.temporaryCachePath) и имеет следующую структуру:

RootCacheFolder
- BundleName1 
  - Hash1 __data (AssetBundle content) 
  - Hash1__info (cache metadata)
- BundleName2
  - Hash2 __data 
  - Hash2 __info

Во время загрузки, Unity использует временный каталог для входящих данных, а затем создает пересжатый AssetBundle в этой структуре.

По умолчанию последний компонент загрузки URL используется в качестве AssetBundle имени для кэша. Чтобы изменить имя, вы можете указать его в структуре CachedAssetBundle.name, которая может быть передана некоторым UnityWebRequestAssetBundle.GetAssetBundle подписям. Обратите внимание, что кэш основан на AssetBundle имени, а не на полном URL.

Хеш версии кэша

Кэш AssetBundle использует хэш-значения в качестве версии AssetBundle. Вы можете предоставить 128-битный хэш (Hash128) или 32-битное значение uint для различения версий. Это может быть генерируемый сборкой хэш, числовая версия или пользовательское значение. Крайне важно обновлять эту версию при выпуске новой сборки AssetBundle, чтобы устройства загружали правильную новую версию, а не старую кэшированную.

Важно: Unity не выполняет автоматические вычисления хэша на AssetBundles во время загрузки и загрузки для проверки содержимого по указанному хэшу версии. Хэш версии является только идентификатором. Циклические проверки избыточности (CRC) доступны для проверки содержимого.

Вы также можете использовать BuildAssetBundleOptions.ForceRebuildAssetBundle для выполнения полной перекомпиляции и BuildAssetBundleOptions.AssetBundleStripUnityVersion для предотвращения изменений хэша между версиями Unity.

Очистка кэша

Unity выполняет очистку кэша автоматически на настольных системах. Он проверяет кэш при запуске, и очищает все AssetBundles, которые не были доступны в Cache.expirationDelay в последние 150 дней.

Поставщики платформ для мобильных устройств поддерживают свои кэши. Для явной очистки кэша на мобильных платформах используйте Cache.ClearCache.

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