Форматы сжатия AssetBundle
По умолчанию Unity создает AssetBundles с LZMA сжатиемметодом хранения данных, который уменьшает объем требуемого места для хранения. См. Сжатие текстур, Сжатие анимации, Сжатие звука, Сжатие компоновки.
См. в Словарь и кэширует их со сжатием LZ4. В этом разделе описываются оба формата сжатия.
конвейер сборки AssetBundle Unity создает AssetBundles со сжатием LZMA. Этот формат сжатия представляет собой поток данных, представляющий весь AssetBundle, а это означает, что если вам нужно прочитать актив из этих архивов, вы должны распаковать весь поток. Это предпочтительный формат для AssetBundles, загружаемых из сети доставки контента (CDN), поскольку размеры файлов меньше, чем при сжатии LZ4.
Сжатие LZ4, с другой стороны, представляет собой алгоритм сжатия на основе фрагментов. Если Unity требуется доступ к активу из архива LZ4, ему нужно только распаковать и прочитать фрагменты, содержащие байты запрошенного актива. Это метод сжатия, который Unity использует в обоих кэшах AssetBundle. Используйте значение BuildAssetBundleOptions.ChunkBasedCompression при сборке AssetBundles для принудительного сжатия LZ4(HC).р>
Несжатые пакеты AssetBundle, которые Unity создает при использовании BuildAssetBundleOptions.UncompressedAssetBundle, не требуют распаковки, но занимают больше места на диске. Несжатые пакеты AssetBundles выравниваются по 16 байтам.
Кэш AssetBundle
Чтобы оптимизировать выборку, повторное сжатие и управление версиями LZMA AssetBundles с помощью WWW или UnityWebRequest (UWR), Unity поддерживает два кеша:
- Кэш памяти хранит AssetBundles в формате UncompressedRuntime в ОЗУ.
- Кэш диска хранит извлеченные пакеты AssetBundles на записываемом носителе в формате сжатия, описанном ниже.
AssetBundles, загруженные в кэш памяти, потребляют большой объем памяти. Если вы специально не хотите часто и быстро получать доступ к содержимому AssetBundle, кэш памяти, скорее всего, не стоит затрат на память. Вместо этого следует использовать дисковый кэш.
Если вы укажете параметр версии для UWR API, Unity сохранит ваши данные AssetBundle в Disk Cache. Если вы не укажете параметр версии, Unity использует кэш памяти. Параметр версии может быть либо номером версии, либо хэшем. Если для параметра Caching.compressionEnabled установлено значение true, Unity применяет сжатие LZ4 при записи AssetBundles на диск. для всех последующих загрузок. Он не сжимает существующие несжатые данные в кэше. Если Caching.compressionEnabled равно false, Unity не применяет сжатие при записи AssetBundles на диск.
Первоначальная загрузка кэшированных пакетов LZMA AssetBundles занимает больше времени, поскольку Unity необходимо повторно сжать архив в формат назначения. При последующих загрузках используется кешированная версия.
AssetBundle.LoadFromFile или AssetBundle.LoadFromFileAsync всегда используйте кэш памяти для LZMA AssetBundles, поэтому вам следует использовать UWR API. Если невозможно использовать UWR API, вы можете использовать AssetBundle.RecompressAssetBundleAsync для перезаписи LZMA AssetBundle на диске.
Примечание. WebGLJavaScript API, который отображает 2D- и 3D-графику в веб-браузере. Вариант сборки Unity WebGL позволяет Unity публиковать контент в виде программ JavaScript, использующих технологии HTML5 и API рендеринга WebGL для запуска контента Unity в веб-браузере. Подробнее
См. в Словарь не поддерживает сжатие LZMA для AssetBundles. Используйте сжатие LZ4 с AssetBundles на платформах WebGL. Дополнительную информацию см. в разделе Сборка и запуск проекта WebGL.
Внутреннее тестирование показывает, что разница в использовании ОЗУ при использовании дискового кэша вместо кэша памяти составляет как минимум порядок. Вы должны взвесить компромисс между объемом памяти и дополнительными требованиями к дисковому пространству, а также временем создания экземпляра ресурса для вашего приложения.