[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 ๊น์ฌ์๋ ์ํ..
์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ๊น์
Shallow Copy์ Deep Copy์ ๋ํด ์ฐพ์๋ณด์ธ์.
์ด๋ฏธ ์๊ณ ์์ต๋๋ค.. ๊ทธ๋์ Clone()ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๋ ๊ฑฐ๊ณ ์ผ๋ฐ Dictionary๋ฅผ ์ฌ์ฉํ ๋๋ Clone()์ผ๋ก ํด๊ฒฐ์ด ๋์ต๋๋ค ์ด๋ฒ์๋ ์ ์ด๊ฒ์ผ๋ก ํด๊ฒฐ์ด ์ ๋๋์ง, ํด๊ฒฐ์ฑ ์ด ๊ถ๊ธํ๊ตฌ์..
ํด๋ก ํจ์ ์ด์ํ๊ฑฐ์๋?
์๋๊ฐ ๋ชจ๋ฐ์ผ๋ก๋ด์ ์ฝ๋ ๋ค ์งค๋ฆฌ๋ค
์ง๊ธ ๋ค์ ๋ณด๋๊น ๋๋ ํฌ๋ฃจ๊ฑฐ ํ์คํ๋ค์ ์ ๋๋ก ์๊ณ ์์ผ๋ฉด ์ ํ๋ ธ๊ฒ ์ฃ ..
stat ํด๋์ค new ๋ก ์๋ก ๋ง๋ค์ด์ก๋๋ฐ, ๊ทธ ์์ ์คํฌ์ด๋ผ๋ ํด๋์ค๋ ์๋ก ๋ง๋ค์ง ์๊ณ ์๋ณธ์ ์คํฏ์ ์คํฌ์ ๊ทธ๋๋ก ํ ๋น๋์ด์ ๊ทธ๋ฐ๊ฒ ์๋๊ฐ์ฌ?? ์คํฌ๋ clone ์ผ๋ก ์๋ก ๋ง๋ค์ด์ ๋ฃ์ด์ผํ์ง ์๋์ ?_?
๋ง๋ ๊ฒ ๊ฐ์์ ํ์ธํด๋ณด๊ณ ์ถ์๋ฐ ์์ดํ์ด๊ฐ ๋ง์ฝ์ด๋ค์
์๋ ๋ฏ ํด์.. Skill์๋ Clone์ ๋ง๋ค์ด์ ํ๋๋ฐ๋ ์ ๋๋ค์ ํ