Формат сцен Unity реализован при помощи языка сериализации данных YAML. Хотя мы не можем рассмотреть здесь все особенности YAML, это открытый формат, и его спецификации доступны бесплатно на сайте YAML. Каждый объект в сцене записан в файл как отдельный YAML документ, который представлен в файле через последовательность —. Заметьте, что в данном контексте термин “объект” обозначает GameObjects, Components и другие данные сцены в совокупности; каждый из этих объектов требует собственный 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). А число, следующее за амперсандом, это идентификационный номер объекта (ID), уникальный внутри файла, хотя и назначающийся каждому объекту произвольно. Каждое сериализуемое свойство объекта обозначается линией, такой как эта:-
m_Name: Cube
--- !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 документ выше. Присоединенная часть обозначается линией:-
m_GameObject: {fileID: 6}
Числа с плавающей точкой могут быть представлены в десятичном виде или как шестнадцатиричное число в формате IEE 754 (обозначенные префиксом 0x). IEE 754 представление используется для кодирования значения без потерь, и используется Unity при записи значений, которые не имеют короткого десятичного вида. Когда Unity записывает числа в шестнадцатиричном виде, они также записываются в десятичном виде в скобках в целях отладки, но только первый вид считывается при загрузке файла. Если хотите отредактировать эти значения вручную, просто уберите шестнадцатиричное число и введите десятичное. Вот несколько корректных примеров записи чисел с плавающей точкой (все представляют число один):
myValue: 0x3F800000
myValue: 1
myValue: 1.000
myValue: 0x3f800000(1)
myValue: 0.1e1
Свойства обычно идут с префиксом “m_”, но в остальном следуют имени свойства, которое определено в справке по скриптам. Второй объект, определенный ниже в файле, может выглядеть следующим образом:- …поскольку GameObject ID в файле был 6.