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

AssetBundle форматы сжатия

Файлы AssetBundle представляют собой архивный формат, содержащий следующие структуры:

  • Небольшая структура данных заголовка. Она никогда не сжимается.
  • Раздел контента, содержащий свои виртуальные файлы, которые при желании можно сжать.

Вы можете сжать файлы AssetBundle в следующих форматах:

По умолчанию Unity сжимает раздел содержимого с помощью LZMA и кэширует AssetBundles с помощью LZ4.

Поскольку различные данные сжимаются с разной экономией размера, наилучшей практикой является восстановление проекта с каждым поддерживаемым вариантом и измерение разницы в размере.

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

Примечание: Если вы используете систему Addressables, вы можете установить формат сжатия в Unity Editor, в настройках группы Inspector. Для более подробной информации, обратитесь к документации Addressables.

LZMA сжатие

LZMA сжимает всю секцию содержимого файла AssetBundle как один поток. Этот подход к полному содержимому приводит к уменьшению размера файла по сравнению с основанным на кусках сжатием LZ4. LZMA является предпочтительным форматом для AssetBundles, загружаемого из сети доставки контента (CDN).

Однако, вы должны распаковать весь файл в RAM для чтения ассета из архивов, сжатых с помощью LZMA. Этот подход работает лучше всего, когда AssetBundle содержит ассеты, которые вы хотите загрузить все сразу. Например, упаковывая все ассеты для персонажа или сцены в одном AssetBundle.

LZMA — формат, используемый при вызове BuildPipeline.BuildAssetBundles без указания конкретного сжатия, например BuildAssetBundleOptions.None.

Примечание: Веб-платформа не поддерживает сжатие LZMA. Вместо этого используйте сжатие LZ4. Дополнительные сведения см. в AssetBundles в Web.

LZ4 сжатие

LZ4 использует алгоритм, основанный на блоках, который декомпрессирует AssetBundle по блокам. Во время записи AssetBundle, Unity индивидуально сжимает каждый из 128 KB блоков содержимого перед сохранением. Этот подход означает, что общий размер файла AssetBundle больше, чем при сжатии LZMA. Однако, вы можете избирательно извлекать и загружать только куски, необходимые для запрашиваемого объекта, вместо того, чтобы декомпрессировать весь AssetBundle.

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

Чтобы использовать этот формат, укажите флаг BuildAssetBundleOptions.ChunkBasedCompression при вызове BuildPipeline.BuildAssetBundles.

Несжатый формат

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

Несжатый AssetBundles Для сборки несжатых файлов AssetBundles, указать флаг BuildAssetBundleOptions.UncompressedAssetBundle при вызове BuildPipeline.BuildAssetBundles.

Пересжатие при кэшировании

Когда AssetBundle распространяется, он обычно в формате LZMA для оптимального размера файла. Если AssetBundle загружается через встроенную поддержку кэширования Unity (UnityWebRequestAssetBundle), Unity динамически пересжимает его в LZ4, когда он загружается и записывается в кэш. Это преобразование оптимизирует для более быстрого декомпрессирования и времени загрузки на клиенте.

Вы можете заставить AssetBundles кэшироваться в несжатом формате, установив Caching.compressionEnabled на false.

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