[Serializable]
public class SerializeDictionary<K, V> : Dictionary<K, V>, ISerializationCallbackReceiver
{
ย  ย  [SerializeField]
ย  ย  List<K> keys = new List<K>();

ย  ย  [SerializeField]
ย  ย  List<V> values = new List<V>();

ย  ย  public void OnBeforeSerialize()
ย  ย  {
ย  ย  ย  ย  keys.Clear();
ย  ย  ย  ย  values.Clear();

ย  ย  ย  ย  foreach (KeyValuePair<K, V> pair in this)
ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  keys.Add(pair.Key);
ย  ย  ย  ย  ย  ย  values.Add(pair.Value);
ย  ย  ย  ย  }
ย  ย  }

ย  ย  public void OnAfterDeserialize()
ย  ย  {
ย  ย  ย  ย  this.Clear();

ย  ย  ย  ย  for (int i = 0, icount = keys.Count; i < icount; ++i)
ย  ย  ย  ย  {
ย  ย  ย  ย  ย  ย  this.Add(keys[i], values[i]);
ย  ย  ย  ย  }
ย  ย  }
}


public class DictionarySkillInfo : SerializeDictionary<string, Skill> { }

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์Šคํ‚ฌ์˜ ์ด๋ฆ„๊ณผ ์Šคํ‚ฌ์„ ๋ฌถ์€ Dictionary๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉ์ค‘์ธ๋ฐ, Stat์ด๋ผ๋Š” class์—ย 

public DictionarySkillInfo skills = new DictionarySkillInfo();

์ด๋Ÿฐ ์‹์œผ๋กœ ๋„ฃ์–ด์„œ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์ด๋ฆ„(์ง์—…)์ด ๊ฐ™์€ ์บ๋ฆญํ„ฐ๋“ค๋ผ๋ฆฌ ์ด DictionarySkillInfo๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋ผ์š”


Stat class์— Clone ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ

ย public Stat Clone()
ย  ย  {
ย  ย  ย  ย  Stat statclone = new Stat();
ย  ย  ย  ย  statclone.skills = this.skills;

ย ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ณต์‚ฌ๋ฅผ ํ•ด๋„ ๊ณ„์† ๊ณต์œ ํ•˜๋”๋ผ๊ตฌ์š” ๋‹ค๋ฅธ ์• ๋“ค์€ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋ฐ ์Šคํ‚ฌ๋งŒ ๊ณต์œ ํ•ด์š”


์บ๋ฆญํ„ฐ๊ฐ€ ์Šคํ‚ฌ A๋ฅผ ์“ฐ๋ฉด A์˜ pp๊ฐ€ 1 ๊นŽ์ด๋Š”๋ฐ

๊ฐ™์€ ์ด๋ฆ„์˜ ๋‹ค๋ฅธ ์บ๋ฆญํ„ฐ์˜ ์Šคํ‚ฌ์ฐฝ์— ์žˆ๋Š” ์Šคํ‚ฌ A๋ฅผ ๋ณด๋ฉด ์ด๋ฏธ pp๊ฐ€ 1 ๊นŽ์—ฌ์žˆ๋Š” ์ƒํƒœ..


์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ• ๊นŒ์š”