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