I have the scriptable object:
public class TranslatableString : ScriptableObject
{
public string Name;
[SerializeField] public Dictionary<Language, string> translations = new Dictionary<Language, string>();
public string this[Language index]
{
get
{
return translations[index];
}
}
}
And field (Name) in my object (named MyObject) of this type.
I created TranslatableString object in assets in set value for dictionary with my custom editor. I put it to my MyObject. I created prefab for the object.
Now, when I instantiating this prefab, I haven`t any data in myObject.Name.translations. But, if I would have, for example, string field in my scriptable object, it value save.
May be problem in my custom editor?
[CustomEditor(typeof(TranslatableString))]
public class TranslatableStringEditor : Editor
{
TranslatableString translatableString;
private void OnEnable()
{
translatableString = (TranslatableString)target;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (translatableString.translations.Count > 0)
{
for (int i = 0; i < translatableString.translations.Count; i++)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(translatableString.translations.ElementAt(i).Key.ToString() + ":");
translatableString.translations[translatableString.translations.ElementAt(i).Key] = EditorGUILayout.TextField(translatableString.translations.ElementAt(i).Value);
EditorGUILayout.EndHorizontal();
}
}
else
{
foreach (Language language in System.Enum.GetValues(typeof(Language)))
{
translatableString.translations.Add(language, "");
}
}
}
}