前言:在上一章節中筆者講解了Odin Inspector 系列教程 --- 初識Odin序列化,Odin是通過繼承
SerializedMonoBehaviour
等類來達到序列化的效果,這次筆者介紹不通過繼承SerializedMonoBehaviour
來實現序列化的方式
下面的示例以MonoBehaviour和ScriptableObject為例子,使用比較簡單,只是在需要的實現序列化的腳本上繼承
ISerializationCallbackReceiver
和CustomSerializedScriptableObject
,并實現相關接口
固定寫法,示例如下
using Sirenix.OdinInspector;
using Sirenix.Serialization;
using System.Collections.Generic;
using UnityEngine;
[ShowOdinSerializedPropertiesInInspector]
public class CustomSerializedMonoBehaviour : MonoBehaviour, ISerializationCallbackReceiver, ISupportsPrefabSerialization
{
[SerializeField, HideInInspector]
private SerializationData serializationData;
SerializationData ISupportsPrefabSerialization.SerializationData { get { return this.serializationData; } set { this.serializationData = value; } }
void ISerializationCallbackReceiver.OnAfterDeserialize()
{
UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
}
void ISerializationCallbackReceiver.OnBeforeSerialize()
{
UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
}
public Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
}
[ShowOdinSerializedPropertiesInInspector]
public class CustomSerializedScriptableObject : ScriptableObject, ISerializationCallbackReceiver
{
[SerializeField, HideInInspector]
private SerializationData serializationData;
void ISerializationCallbackReceiver.OnAfterDeserialize()
{
UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData);
}
void ISerializationCallbackReceiver.OnBeforeSerialize()
{
UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData);
}
}