Unity 6.3
0 онлайн 106 гостей 3 в системе
Вход
Сцены Шаг 47 из 48

YAML префаб пример сериализации

На этой странице показаны аннотированные выдержки YAML из экземпляров префаб, вложенные префабы и варианты префаб из файлов проекта Unity. Выдержки вырезаны для удобства чтения: оригинальные файлы содержат больше записей m_Modifications, чем показано на этой странице. Описание модели данных, которой следуют эти выдержки, см. в сериализации YAML из префабы.

На этой странице рассматриваются следующие концепции:

Экземпляр Префаб в сцене

Следующая выдержка из файла сцены, который помещает экземпляр камня префаб в сцену. Экземпляр переопределяет положение камня, вращение и имя.

--- !u!1001 &11866470
PrefabInstance:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    serializedVersion: 3
    m_TransformParent: {fileID: 1122852772}
    m_Modifications:
    - target: {fileID: 599465214307944399, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
      propertyPath: m_LocalPosition.x
      value: 39.341
      objectReference: {fileID: 0}
    - target: {fileID: 599465214307944399, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
      propertyPath: m_LocalPosition.y
      value: 4.425
      objectReference: {fileID: 0}
    - target: {fileID: 599465214307944399, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
      propertyPath: m_LocalPosition.z
      value: 26.527
      objectReference: {fileID: 0}
    - target: {fileID: 599465214307944399, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
      propertyPath: m_LocalRotation.w
      value: 0.69781095
      objectReference: {fileID: 0}
    - target: {fileID: 8354524949365800270, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
      propertyPath: m_Name
      value: Rock_05_Prefab (4)
      objectReference: {fileID: 0}
    m_RemovedComponents: []
    m_RemovedGameObjects: []
    m_AddedGameObjects: []
    m_AddedComponents: []
  m_SourcePrefab: {fileID: 100100000, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
--- !u!4 &11866471 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: 599465214307944399, guid: 95cf80858ee0c4940b72f62b17aefd41, type: 3}
  m_PrefabInstance: {fileID: 11866470}
  m_PrefabAsset: {fileID: 0}

Ключевые моменты в выдержке:

  • Элемент PrefabInstance с fileID 11866470 представляет экземпляр. Его поле m_SourcePrefab ссылается на ассет rock префаб (по guid) через обработчик ассета префаб (fileID 100100000).
  • m_Modification.m_TransformParent ссылается на компонент Transform в том же файле сцены, делая экземпляр префаб дочерним объектом этого объекта сцены в иерархии.
  • Каждая запись в m_Modifications содержит одно переопределение свойства. target идентифицирует объект внутри источника префаб по guid и fileID, и сочетание propertyPath и value указать переопределенное свойство и его значение.
  • Изъятый элемент Transform (элемент с атрибутом stripped) в fileID 11866471 является заместителем компонента Transform в корне экземпляра префаб GameObject. Другие объекты в сцене используют этот замещающий элемент, когда они ссылаются на корень экземпляра префаб, например в списке m_Children компонента Transform родительского объекта сцены.

Оригинальный список m_Modifications в исходном файле также содержит другие компоненты вращения и переопределения euler-angle-hint; они здесь опущены для удобства чтения.

Вложенные префаб

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

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6949479575104989305
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1188189139150009913}
  m_Layer: 0
  m_Name: Stone_01_Prefab
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 2147483647
  m_IsActive: 1
--- !u!4 &1188189139150009913
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 6949479575104989305}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_ConstrainProportionsScale: 0
  m_Children:
  - {fileID: 8712595929885449456}
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &9179429690634107675
PrefabInstance:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    serializedVersion: 3
    m_TransformParent: {fileID: 1188189139150009913}
    m_Modifications:
    - target: {fileID: 919132149155446097, guid: 5a62bd76f7db850498f128cc2e7b59d2, type: 3}
      propertyPath: m_Name
      value: Stone_01_Mesh
      objectReference: {fileID: 0}
    - target: {fileID: 4742473837712756890, guid: 5a62bd76f7db850498f128cc2e7b59d2, type: 3}
      propertyPath: m_FadeMode
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 4742473837712756890, guid: 5a62bd76f7db850498f128cc2e7b59d2, type: 3}
      propertyPath: m_AnimateCrossFading
      value: 1
      objectReference: {fileID: 0}
    m_RemovedComponents: []
    m_RemovedGameObjects:
    - {fileID: -1027982724379016789, guid: 5a62bd76f7db850498f128cc2e7b59d2, type: 3}
    m_AddedGameObjects: []
    m_AddedComponents: []
  m_SourcePrefab: {fileID: 100100000, guid: 5a62bd76f7db850498f128cc2e7b59d2, type: 3}
--- !u!4 &8712595929885449456 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 5a62bd76f7db850498f128cc2e7b59d2, type: 3}
  m_PrefabInstance: {fileID: 9179429690634107675}
  m_PrefabAsset: {fileID: 0}

Ключевые моменты примера:

  • Корень внешнего префаб сериализируется как два отдельных элемента YAML: элемент GameObject (fileID 6949479575104989305) и его компонентный элемент Transform (fileID 1188189139150009913). Unity записывает их оба непосредственно в файл, так же, как он записывает любой не-префаб GameObject.
  • Поле m_Children на внешнем элементе компонента Transform перечисляет fileID из удаленного элемента замены Transform для вложенного экземпляра (8712595929885449456). Эта ссылка помещает корень вложенного префаб в качестве дочернего элемента в иерархии внешнего префаб.
  • Элемент PrefabInstance с fileID 9179429690634107675 представляет вложенный экземпляр префаб. Его поле m_SourcePrefab ссылается на другой ассет префаб (источник Stone префаб), идентифицированный guid.
  • Поле m_Modification.m_TransformParent на вложенном PrefabInstance ссылается на внешний элемент компонента Transform. В результате вложенный экземпляр размещается под корнем внешнего префаб в иерархии.
  • Раздевание Transform элемент замены на fileID 8712595929885449456 является целью, которую внешний Transform компонента m_Children поле указывает на. его m_CorrespondingSourceObject поле определяет конкретный Transform компонент внутри источника Stone префаб который представляет этот заполнитель.
  • В списке m_RemovedGameObjects содержится одна запись, которая указывает, что один дочерний объект GameObject из источника префаб удален из этого вложенного экземпляра. Списки m_RemovedComponents и m_AddedGameObjects пустые.

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

Вариант Префаб

Следующая выдержка взята из файла варианта префаб. Этот вариант представляет собой горизонтально перевернутую версию базовой двери префаб.

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &5365984487090290000
PrefabInstance:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    serializedVersion: 3
    m_TransformParent: {fileID: 0}
    m_Modifications:
    - target: {fileID: 1262770979034925880, guid: 89d4c08db6b9096438cb6c7718d47f26, type: 3}
      propertyPath: m_Name
      value: DoorFusuma_100x200_01_Prefab (38) Variant
      objectReference: {fileID: 0}
    - target: {fileID: 1727893522013754926, guid: 89d4c08db6b9096438cb6c7718d47f26, type: 3}
      propertyPath: m_LocalScale.x
      value: -1
      objectReference: {fileID: 0}
    - target: {fileID: 1761800793405478535, guid: 89d4c08db6b9096438cb6c7718d47f26, type: 3}
      propertyPath: m_LocalScale.x
      value: -1
      objectReference: {fileID: 0}
    - target: {fileID: 7660580366407964633, guid: 89d4c08db6b9096438cb6c7718d47f26, type: 3}
      propertyPath: m_LocalScale.x
      value: -1
      objectReference: {fileID: 0}
    m_RemovedComponents: []
    m_RemovedGameObjects: []
    m_AddedGameObjects: []
    m_AddedComponents: []
  m_SourcePrefab: {fileID: 100100000, guid: 89d4c08db6b9096438cb6c7718d47f26, type: 3}

Ключевые моменты в выдержке:

  • Корневой элемент YAML файла варианта является PrefabInstance, который имеет идентификатор класса 1001. Невариантный файл префаб, напротив, начинается с GameObject элемент.
  • Поле m_Modification.m_TransformParent — это {fileID: 0}. Элемент PrefabInstance не имеет родительского преобразования, так как он является корнем файла. Это характерно для вариантов префаб.
  • Поле m_SourcePrefab ссылается на базу префаб, от которой наследуется вариант.
  • Записи в списке m_Modifications содержат переопределения свойств, которые делают этот вариант отличным от базового. В этом примере отрицательные значения свойств m_LocalScale.x на трех компонентах Transform переворачивают геометрию двери горизонтально.

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

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