From 933740c8879d88cf985dd406cfe62ae34c759e38 Mon Sep 17 00:00:00 2001 From: "aube.lee" Date: Sat, 1 Feb 2025 18:11:51 +0900 Subject: [PATCH] =?UTF-8?q?Dictonary=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=ED=98=95=ED=83=9C=20=EC=82=AC=EC=9A=A9=20=ED=95=A0=20=EC=88=98?= =?UTF-8?q?=20=EC=9E=88=EB=8F=84=EB=A1=9D=20common=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Common/SerializableDictionary.cs | 49 +++++++++++++++++++ .../Common/SerializableDictionary.cs.meta | 11 +++++ 2 files changed, 60 insertions(+) create mode 100644 Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs create mode 100644 Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs new file mode 100644 index 00000000..f9d9325f --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace TON +{ + [System.Serializable] + public class SerializableDictionary : Dictionary, ISerializationCallbackReceiver + { + [System.Serializable] + struct WrapValueClass + { + public TValue Value; + } + + [SerializeField] + private List keys = new List(); + + [SerializeField] + private List values = new List(); + + + // save the dictionary to lists + public void OnBeforeSerialize() + { + keys.Clear(); + values.Clear(); + foreach (KeyValuePair pair in this) + { + keys.Add(pair.Key); + values.Add(new WrapValueClass() { Value = pair.Value }); + } + } + + // load dictionary from lists + public void OnAfterDeserialize() + { + this.Clear(); + if (keys.Count > 0 && values.Count > 0) + { + if (keys.Count != values.Count) + throw new System.Exception(string.Format("there are {0} keys and {1} values after deserialization. Make sure that both key and value types are serializable.")); + + for (int i = 0; i < keys.Count; i++) + this.Add(keys[i], values[i].Value); + } + } + } +} diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta new file mode 100644 index 00000000..da7ac19d --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f0349e2dec5bf347a33316665351092 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: