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 であったためです。
浮動小数点数は、IEEE 754形式(0x プレフィックスで示されます)の 10進数表記または16進数で表します。IEEE 754表記は、値のロスレス符号化に使用され、短い 10進数表記を持たない浮動小数点値を表すときにUnityによって使用されます。Unityが 16進数で数値を書き込むときには、デバッグの目的で括弧で10進数の書式でも表記しますが、ファイルをロードするときには 16進数のみを実際にパースします。このような値を手動で編集する場合は、単に16進数を削除し 10進数のみを入力します。以下は、浮動小数点値の有効な表現です (すべて 1を表しtています)。
myValue: 0x3F800000
myValue: 1
myValue: 1.000
myValue: 0x3f800000(1)
myValue: 0.1e1