先日投稿いたしました、こちらの記事の補足、というか余談です。
Unityのアセット、シーンやプレハブ、ScriptableObjectはyamlファイルとして保存されています。
SerializeReferenceを用いた場合、yamlファイルはどうなっているのでしょうか。
上記の記事で作成したsampleの.assetをテキストエディタなどで開いてみると
%YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 0} m_Name: New Sample Class m_EditorClassIdentifier: Assembly-CSharp::SampleClass _array: - id: 0 - id: 1 - id: 2 references: version: 1 00000000: type: {class: SampleClassA, ns: , asm: Assembly-CSharp} data: _name: _value: 0 00000001: type: {class: SampleClassB, ns: , asm: Assembly-CSharp} data: _name: _description: 00000002: type: {class: , ns: , asm: }
このようになっています。
おや、これはめちゃくちゃ見やすいのでは……
asm(アセンブリ)、ns(名前空間、グローバルだと空文字っぽい)、class(クラス名)と型を明記したうえでシリアライズされているおかげで、 すごく見通しが良く感じます。
シリアライズされている参照先インスタンスにIDが振られている形ですので、同じインスタンスを指定したければ同じIDを指定すればいいようです。