Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход

Детерминизм AssetBundle и Addressables

AssetBundles и Addressables имеют соответствующие рабочие процессы для обеспечения детерминированных сборок.

AssetBundle наилучшая практика детерминизма

При сборке AssetBundle каждый связанный ассет и каждая зависимость должны оставаться неизменными. Не используйте в именах AssetBundle отметки времени и даты сборки — применяйте статические идентификаторы или семантические версии.

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

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

  • Используйте систему управления версиями для выявления ассетов, которые могли быть случайно изменены.
  • Используйте такие инструменты, как UnityDataTools, чтобы найти различия в серийных данных, содержащихся в AssetBundles.

Дополнительные сведения о сборке AssetBundles см. в разделе Создание ассетов в AssetBundle.

Адресуемый детерминизм

Поскольку система Addressables построена на AssetBundle API, все наилучшие практики детерминизма из предыдущего раздела AssetBundle применимы к Addressables. Адресуемые сборки являются детерминированными, когда среда сборки и входы идентичны.

Детерминистическое поведение Addressables также зависит как от Scriptable Build Pipeline (SBP), так и от Вычисление хеша Addressable.

Поскольку SBP вычисляет контент-ориентированный хэш из выходных данных сборки, он более чувствителен к изменениям по сравнению с хешированием AssetBundle, которое Unity вычисляет из входных данных сборки.

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

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

Addressables использует хэш содержимого, который SBP генерирует для кэширования. Вычисление хэша SBP не ограничивается двоичным содержимым AssetBundle. Оно также включает имена всех зависимых AssetBundles, на которые ссылается цель AssetBundle. Дополнительные сведения см. в Адресуемые зависимости активов.

Скрипты автоматизации редактора

Если в проекте используется автоматизация Редактора, например пользовательские скрипты, автоматически назначающие ресурсы адресуемым группам, убедитесь в следующем:

  • Порядок назначенных Addressables и Адресуемых групп является детерминированным.
  • Каждая среда сборки имеет идентичные Настройки Адресуемых Активов.

Определение недетерминированных адресуемых сборок

Каждая сборка Addressables автоматически создает отчет о макете сборки, который включает информацию обо всех собранных ассетах в вашем проекте. Дополнительные сведения см. в разделе Создание отчета о сборке.

Для проверки на двоичном уровне используйте проект UnityDataTools, который может дампировать или экспортировать двоичные файлы в читаемые базы данных или текстовые файлы, позволяя подробное сравнение серийных данных до отдельных полей компонентов.

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