ノートの端の書き残し

UnityやらC#やら触っていたときのメモ

SerializeReferenceでシリアライズしたときyamlファイルはどうなってるのか

先日投稿いたしました、こちらの記事の補足、というか余談です。

nigiri.hatenablog.com

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を指定すればいいようです。