Dictonary 데이터 형태 사용 할 수 있도록 common 클래스 추가

This commit is contained in:
aube.lee
2025-02-01 18:11:51 +09:00
parent c1249a5749
commit 933740c887
2 changed files with 60 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TON
{
[System.Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
{
[System.Serializable]
struct WrapValueClass
{
public TValue Value;
}
[SerializeField]
private List<TKey> keys = new List<TKey>();
[SerializeField]
private List<WrapValueClass> values = new List<WrapValueClass>();
// save the dictionary to lists
public void OnBeforeSerialize()
{
keys.Clear();
values.Clear();
foreach (KeyValuePair<TKey, TValue> 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);
}
}
}
}