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с fileID11866470представляет экземпляр. Его полеm_SourcePrefabссылается на ассет rock префаб (поguid) через обработчик ассета префаб (fileID100100000). m_Modification.m_TransformParentссылается на компонентTransformв том же файле сцены, делая экземпляр префаб дочерним объектом этого объекта сцены в иерархии.- Каждая запись в
m_Modificationsсодержит одно переопределение свойства.targetидентифицирует объект внутри источника префаб поguidиfileID, и сочетаниеpropertyPathиvalueуказать переопределенное свойство и его значение. - Изъятый элемент
Transform(элемент с атрибутомstripped) в fileID11866471является заместителем компонента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(fileID6949479575104989305) и его компонентный элементTransform(fileID1188189139150009913). Unity записывает их оба непосредственно в файл, так же, как он записывает любой не-префаб GameObject. - Поле
m_Childrenна внешнем элементе компонентаTransformперечисляет fileID из удаленного элемента заменыTransformдля вложенного экземпляра (8712595929885449456). Эта ссылка помещает корень вложенного префаб в качестве дочернего элемента в иерархии внешнего префаб. - Элемент
PrefabInstanceс fileID9179429690634107675представляет вложенный экземпляр префаб. Его полеm_SourcePrefabссылается на другой ассет префаб (источникStoneпрефаб), идентифицированныйguid. - Поле
m_Modification.m_TransformParentна вложенномPrefabInstanceссылается на внешний элемент компонентаTransform. В результате вложенный экземпляр размещается под корнем внешнего префаб в иерархии. - Раздевание
Transformэлемент замены на fileID8712595929885449456является целью, которую внешний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переворачивают геометрию двери горизонтально.
Оригинальный файл содержит дополнительные преобразования и переопределения позиции, которые завершают перевернутый макет, они здесь опущены для удобства чтения.