Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Строительство AssetBundles

В документации по рабочему процессу AssetBundle есть пример кода, который передает три аргумента в BuildPipeline.BuildAssetBundles функция. Давайте углубимся в то, что мы на самом деле говорим.

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

BuildAssetBundleOptions

Существует несколько различных BuildAssetBundleOptions, которые можно указать и которые будут иметь различные эффекты. См. Справочник по Scripting API в разделе BuildAssetBundleOptions для получения таблицы всех параметров.

Хотя вы можете комбинировать BuildAssetBundleOptions по мере необходимости, существуют три конкретных BuildAssetBundleOptions, которые относятся к AssetBundle. СжатиеМетод хранения данных, уменьшающий требуемый объем дискового пространства. См. Сжатие текстур, Сжатие анимации, Сжатие звука, Сжатие компоновки.
См. в Словарь
:

  • BuildAssetBundleOptions.None: этот вариант пакета использует сжатие формата LZMA, которое представляет собой единый сжатый поток LZMA сериализованных файлов данных. Сжатие LZMA требует, чтобы весь пакет был распакован перед его использованием. Это приводит к наименьшему возможному размеру файла, но немного большему времени загрузки из-за распаковки. Стоит отметить, что при использовании этого BuildAssetBundleOptions, чтобы использовать какие-либо ресурсы из пакета, весь пакет должен быть изначально распакован.
    После распаковки пакета он будет повторно сжат на диске с использованием сжатия LZ4, что не требует распаковки всего пакета перед использованием ресурсов из пакета. Это лучше всего использовать, когда пакет содержит активы, так что использование одного актива из бандла будет означать, что все активы будут загружены. Упаковка всех ресурсов для персонажа или сцены — вот несколько примеров пакетов, которые могут использовать это.
    Использование сжатия LZMA рекомендуется только для первоначальной загрузки AssetBundle с удаленного хоста из-за меньшего размера файла. Пакеты сжатых ресурсов LZMA, загружаемые через UnityWebRequestAssetBundle, автоматически повторно сжимаются до сжатия LZ4 и кэшируются в локальной файловой системе. Если вы загружаете и сохраняете пакет другими способами, вы можете повторно сжать его с помощью API AssetBundle.RecompressAssetBundleAsync.

  • BuildAssetBundleOptions.UncompressedAssetBundle: этот параметр пакета создает пакеты таким образом, что данные полностью несжаты. Недостатком несжатого файла является больший размер загружаемого файла. Однако время загрузки после загрузки будет намного быстрее. Несжатые пакеты AssetBundles выравниваются по 16 байтам.

  • BuildAssetBundleOptions.ChunkBasedCompression: этот вариант пакета использует метод сжатия, известный как LZ4, который приводит к большему размеру сжатого файла, чем LZMA, но не требует распаковки всего пакета, в отличие от LZMA, перед его можно использовать. LZ4 использует алгоритм на основе фрагментов, который позволяет загружать AssetBundle по частям или «фрагментам». Распаковка одного фрагмента позволяет использовать содержащиеся в нем ресурсы, даже если другие фрагменты AssetBundle не распакованы.

Использование ChunkBasedCompression обеспечивает сравнимое время загрузки с несжатыми пакетами с дополнительным преимуществом меньшего размера на диске.

Создать цель

BuildTarget.Standalone: здесь мы сообщаем конвейеру сборки, для какой целевой платформы мы собираемся использовать эти AssetBundles. Вы можете найти список доступных явных целей сборки в справочнике по Scripting API для BuildTarget. Однако, если вы не хотите жестко кодировать свою цель сборки, не стесняйтесь воспользоваться преимуществом EditorUserBuildSettings.activeBuildTarget, который автоматически найдет платформу, для которой вы сейчас настроили сборку, и создайте свои AssetBundles на основе этой цели.

После того, как вы правильно настроили скрипт сборки, пришло время собирать пакеты. Если вы следовали приведенному выше примеру скрипта, нажмите АктивыЛюбой носитель или данные, которые можно использовать в вашей игре или проекте. Ресурс может быть получен из файла, созданного вне Unity, например, из 3D-модели, аудиофайла или изображения. Вы также можете создавать некоторые типы ресурсов в Unity, например контроллер аниматора, аудиомикшер или текстуру рендеринга. Подробнее
См. Словарь
> Сборка AssetBundles для начала процесс.

Теперь, когда вы успешно собрали свои AssetBundles, вы можете заметить, что в вашем каталоге AssetBundles больше файлов, чем вы могли изначально ожидать. На 2*(n+1) больше файлов, если быть точным. Давайте уделим минуту и ​​подробно рассмотрим, что дает BuildPipeline.BuildAssetBundles.

Для каждого AssetBundle, указанного вами в редакторе, вы увидите файл с вашим именем AssetBundle и вашим именем AssetBundle + «.manifest».

Будет дополнительный пакет и манифест, имя которого не совпадает ни с одним из созданных вами AssetBundle. Вместо этого он назван в честь каталога, в котором он находится (где были созданы AssetBundles). Это комплект манифеста. Мы обсудим это подробнее и как использовать в будущем.

Файл AssetBundle

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

Файл AssetBundle представляет собой архив, содержащий несколько внутренних файлов. Структура этого архива может незначительно меняться в зависимости от того, является ли он AssetBundle или Scene. Сцена содержит среды и меню вашего игра. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
AssetBundle. Это структура обычного AssetBundle:

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

Файл манифеста

Для каждого созданного пакета, включая дополнительный пакет манифеста, создается соответствующий файл манифеста. Файл манифеста можно открыть в любом текстовом редакторе, он содержит такую информацию, как данные проверки циклическим избыточным кодом (CRC) и зависимость
Просмотрите в Словарь
данные для пакета. Для обычных AssetBundles их файл манифеста будет выглядеть примерно так:

ManifestFileVersion: 0 CRC: 2422268106 Hashes: AssetFileHash: serializedVersion: 2 Hash: 8b6db55a2344f068cf8a9be0a662ba15 TypeTreeHash: serializedVersion: 2 Hash: 37ad974993dbaa77485dd2a0c38f347a HashAppended: 0 ClassTypes: - Class: 91 Script: {instanceID: 0} Assets: Asset_0: Assets/Mecanim/StateMachine.controller Dependencies: {}

Который показывает содержащиеся ресурсы, зависимости и другую информацию.

Сгенерированный пакет манифеста будет иметь манифест, но он будет выглядеть примерно так:

ManifestFileVersion: 0 AssetBundleManifest: AssetBundleInfos: Info_0: Name: scene1assetbundle Dependencies: {}

Это покажет, как связаны AssetBundles и каковы их зависимости. А пока просто поймите, что этот пакет содержит объект AssetBundleManifest, который будет невероятно полезен для выяснения того, какие зависимости пакетов нужно загружать во время выполнения. Чтобы узнать больше о том, как использовать этот пакет и объект манифеста, см. документацию по использованию AssetBundles Native.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3