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

BuildAssetBundleOptions.DisableWriteTypeTree

Описание

Опускает информацию о типе из AssetBundle.

Этот флаг полезен для AssetBundles, которые включены в сборки Player и перестраиваются для каждого нового выпуска Player. Однако, прежде чем использовать этот флаг, важно полностью понять последствия удаления деревьев типов для совместимости и перераспределения.

По умолчанию (когда этот флаг , а не), каждый SerializedFile внутри AssetBundle содержит информацию о дереве типов для всех типов, используемых в этом файле.

Деревья типов позволяют Unity:

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

При указании этого флага в заголовках SerializedFile записывается только хэш каждого Деревья Типов, а не все определение Дерева Типов.

Пример:

Допустим, AssetBundle содержит экземпляры класса, производного от MonoBehaviour, с двумя полями: строкой `A`, за которой следует целое число `B`. Type Tree записывает порядок, типы и имена полей, чтобы двоичное представление каждого сериализованного объекта этого типа можно было корректно интерпретировать.

Теперь допустим, что определение класса изменилось: первым идёт float `C`, затем целое число `B` и строка `A`.

Type Tree внутри AssetBundle гарантирует, что новые сборки плеера всё ещё смогут его загрузить и восстановить значения полей `A` и `B`, даже если они не совпадают с текущим определением этого класса.

Преимущества использования DisableWriteTypeTree:

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

Важные соображения:

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

  • Они могут быть загружены только Игроками, построенными с точно такими же типами. Unity проверяет это путем сравнения хэшей Деревья Типов во время загрузки, и загрузка будет неудачной, если будет обнаружено какое-либо несоответствие.
  • Они не могут быть загружены в Редактор.
  • Такие инструменты, как binary2text и UnityDataTools не могут просматривать данные с серийным номером.

Ограничения платформы

Для некоторых платформ (e.g. BuildTarget.WebGL), деревья типов обязательны. Unity отвергнет попытки построить AssetBundles с этим флагом для таких целей.