Unity のシーン形式は YAML データシリアライズ言語により実装されています。ここでは YAML について深く掘り下げませんが、オープンな形式であり仕様については無料で http://yaml.org/spec/1.2/spec.html にて確認できます。シーンの各オブジェクトはファイルに対して別 YAML ドキュメントとして書かれ、ファイルの中では — シーケンスにより区切られます。文脈の中で “オブジェクト” はゲームオブジェクト、コンポーネント、および他のシーンのデータを一括して指し示します。これらの各々のアイテムは個々に 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!” の後の最初の数字はオブジェクトのクラスを表します(この場合ではゲームオブジェクト)。続く & の後の数字はファイルの中で一意のオブジェクト ID 番号ですが、この番号は任意に各オブジェクトに割り当てられます。各オブジェクトのシリアライズ可能なプロパティー次のような行により記されます:
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}
これは前述の YAML ドキュメントで定義されたゲームオブジェクトにアタッチされた Transform コンポーネントです。アタッチはこの行により記述します。
m_GameObject: {fileID: 6}
… このように記述するのは、ファイル内でのゲームオブジェクトのオブジェクト ID が 6 であったためです。
浮動小数点数は十進数または十六進数、すなわち IEE 754 形式( 0x により始めます)、のいずれかによって表現することができます。IEE 754 表記はデータ喪失のない値のエンコーディングに用いられ、Unity により、short 型の表記がなされてない、浮動小数点の値を記述するときに使用されます。Unity が十六進数で記述するとき、デバッグ目的で十進数表記を括弧の中にあわせて記述しますが、実際には十六進数のみがファイルのロード時にパースされます。もしそのような値を手動で編集したい場合、単に十六進数を取り除いて、十進数のみを入力してください。次はいくつか有効な表記方法を示します(すべて 1 の値を表してます)。
myValue: 0x3F800000
myValue: 1
myValue: 1.000
myValue: 0x3f800000(1)
myValue: 0.1e1