Формат текстовых серийных файлов
Формат сцен Unity использует специальное подмножество языка сериализации данных YAML. YAML — открытый формат; его документация доступна на сайте YAML. Дополнительные сведения о YAML, используемом в Unity, см. в документации по UnityYAML.
Файл записывает каждый Объект в Scene в качестве отдельного документа YAML. Последовательность --- вводит каждый Объект в файл. В этом контексте термин “Объект” относится к GameObjects, Компонентам и другим данным сцены в совокупности: каждый из этих элементов нуждается в собственном документе YAML в файле сцены. Следующий пример показывает базовую структуру серийного объекта:
--- !u!1 &6
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
importerVersion: 3
m_Component:
- 4: {fileID: 8}
- 33: {fileID: 12}
- 65: {fileID: 13}
- 23: {fileID: 11}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
Первая строка содержит строку !u!1 &6 после маркера документа. Первое число после !u! обозначает класс объекта (в данном случае GameObject). Число после амперсанда — идентификатор объекта, уникальный в пределах файла, хотя каждому объекту он присваивается произвольно. Каждое сериализуемое свойство объекта записывается строкой такого вида:
m_Name: Cube
Свойства обычно префиксируются m_, но в остальном следуют за именем свойства, как определено в ссылке на скрипт. Следующий пример показывает, как выглядит второй объект, определенный дальше в файле:
--- !u!4 &8
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 6}
m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}
m_LocalPosition: {x: -2.618721, y: 1.028581, z: 1.131627}
m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}
m_Children: []
m_Father: {fileID: 0}
В следующем примере показано приложенное Transform компонента к GameObject определяемые в соответствии YAML документ выше. {fileID:6} используется для представления GameObject как GameObjectЦель ID в файле было 6.
m_GameObject: {fileID: 6}
…
Для представления числа с плавающей запятой можно использовать десятичное представление или шестнадцатеричные числа в формате IEEE 754 (обозначаемом префиксом 0x). Unity использует представление IEEE 754 для кодирования значений без потерь и для записи значений с плавающей запятой, которые не имеют короткого десятичного представления. Когда Unity пишет числа в шестнадцатеричной системе, он всегда записывает десятичный формат в скобках для целей отладки, но только шестнадцатеричная система фактически анализируется при загрузке файла. Чтобы редактировать эти значения вручную, удалите шестнадцатикратную и введите десятичное число. Следующий пример показывает правильное представление значений с плавающей запятой (все представляют число один):
myValue: 0x3F800000
myValue: 1
myValue: 1.000
myValue: 0x3f800000(1)
myValue: 0.1e1