Unity/코드 예제들

ScriptableObject에서 Dictionary 처리 .

소나무꼴 2021. 5. 31. 18:39

ScriptableObject에서 Dictionary 는 저장되지 않아 따로 처리 해주어야 한다.

 

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

[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 SerializeDicString : SerializeDictionary<string, string> { }

public SerializeDicString dicString = new SerializeDicString();

void Test()
{
	dicString.Add("aa","bb");
}