字典序列化
在 Unity 中,标准的 C# 字典(Dictionary<TKey, TValue>)是不能直接序列化的,因为 Unity 的序列化系统不支持非 Unity 序列化的集合类型。可以通过手写字典实现
效果:

实现步骤:
-  继承 ISerializationCallbackReceiver接口自定义序列化和反序列化过程。-  序列化之前**—将数据保存到List**中  ISerializationCallbackReceiver.OnBeforeSerialize()
-  反序列化之后调用 — 从List中恢复数据  ISerializationCallbackReceiver.OnAfterDeserialize()
 
-  
-  需导入序列化插件odin,否则无法在Inspector面板看到 - 地址:https://download.csdn.net/download/Xz616/89503957
 
代码:
public abstract class UnitySerializedDictionary<TKey, TValue> : Dictionary<TKey, TValue>,
        ISerializationCallbackReceiver
    {
        [SerializeField, HideInInspector] private List<TKey> keyData = new List<TKey>();
        [SerializeField, HideInInspector] private List<TValue> valueData = new List<TValue>();
        /// <summary>
        /// 反序列化之后调用 --- 从List中恢复数据
        /// </summary>
        void ISerializationCallbackReceiver.OnAfterDeserialize()
        {
            this.Clear();
            for (int i = 0; i < this.keyData.Count && i < this.valueData.Count; i++)
            {
                this[this.keyData[i]] = this.valueData[i];
            }
        }
        /// <summary>
        /// 序列化之前调用---将数据保存到List中
        /// </summary>
        void ISerializationCallbackReceiver.OnBeforeSerialize()
        {
            this.keyData.Clear();
            this.valueData.Clear();
            foreach (var item in this)
            {
                this.keyData.Add(item.Key);
                this.valueData.Add(item.Value);
            }
        }
    }



















