using System.Collections.Generic; using UnityEngine; public abstract class UnitySerializedDictionary : Dictionary, ISerializationCallbackReceiver { [SerializeField] [HideInInspector] private List keyData = new List(); [SerializeField] [HideInInspector] private List valueData = new List(); void ISerializationCallbackReceiver.OnAfterDeserialize() { Clear(); for (int i = 0; i < keyData.Count && i < valueData.Count; i++) { base[keyData[i]] = valueData[i]; } } void ISerializationCallbackReceiver.OnBeforeSerialize() { keyData.Clear(); valueData.Clear(); using Enumerator enumerator = GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair current = enumerator.Current; keyData.Add(current.Key); valueData.Add(current.Value); } } }