본문 바로가기
개발/Unity

Unity) Inspector in Dictionary Serialize

by 테샤르 2021. 2. 27.

Inspector in Dictionary Serialize

 Inspector에서 데이터를 확인하면 굉장히 편하게 확인이 가능하다.

Dictionary타입은 원소 타입이 아니기 때문에 Serialize 하지 않아서 inspector에 노출이 되지 않는데

ISerializationCallbackReceiver를 사용하면 Serialize Field Type으로 수정해서 노출이 가능하다.

 

반응형

<SerializableDictionary.cs>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[System.Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
{
    [SerializeField]
    private List<TKey> keys = new List<TKey>();
    [SerializeField]
    private List<TValue> values = new List<TValue>();
    // 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(pair.Value);
        }
    }
    // load dictionary from lists 
    public void OnAfterDeserialize()
    {
        this.Clear();
        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]);
    }
}


반응형

 

 [System.Serializable]
    public class SerializeDicString : SerializableDictionary<string, string>
    {

    }
public SerializeDicString item =  new SerializeDicString();

 

Unity Script Serialzie : [Doc]

 

스크립트 직렬화 - Unity 매뉴얼

직렬화는 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 말합니다. Unity 에디터에서는 저장 및 로딩, 인스펙터 창, 인

docs.unity3d.com

 

★☆

 

반응형

댓글