В этом редакторе я установил несколько полей. При сохранении префаба сохраняются только некоторые из этих полей. В частности, обычные поля, такие как int, string, float, сохраняются нормально. Но у меня есть поля, в которых хранятся данные следующей структуры:
Код: Выделить всё
[System.Serializable]
public class MovementVariableModifierData
{
[ItemType]
public string modifierItemID = "";
public int modifierItemIdx;
[SerializeField]
public Dictionary multipliers = new Dictionary();
[SerializeField]
public Dictionary addends = new Dictionary();
}
Код: Выделить всё
public class MyClass
{
Modifiers = new MovementVariableModifierData[0];
}
Код: Выделить всё
// Custom Editor Code:
// read old values and copy them to new list
tmpModifiers = new List(Modifiers)
for (int i = 0; i < tmpModifiers.Count; i++)
{
// MODIFY Int and String - these get saved
tmpModifiers[i].modifierItemIdx = EditorGUILayout.Popup(new GUIContent("Item ID:"), tmpModifiers[i].modifierItemIdx, itemTypes);
tmpModifiers[i].modifierItemID = itemTypes[tmpModifiers[i].modifierItemIdx];
// MODIFY Dictionary - Doesn't get saved
// Set default value
if (!tmpModifiers[i].multipliers.ContainsKey("Key1")) tmpModifiers[i].multipliers["Key1"] = 1.0f;
tmpModifiers[i].multipliers["Key1"] = EditorGUILayout.FloatField(new GUIContent("Key 1:"), tmpModifiers[i].multipliers["Key1"]);
// There's many more of these in the loop but they all use this exact pattern.
}
Modifiers = tmpModifiers.ToArray();
Кажется, что данные обновляются нормально, когда я использую Debug.Log(), и они правильно отображаются в инспекторе, но когда я сохраняю префаб а затем закройте и снова откройте его, значения, хранящиеся в словарях, сбрасываются. Значение, хранящееся в поле int/string modifierItemID и modifierItenIdx, и добавление новых записей MovementVariableModifierData в массив Modifiers также успешно сохраняется (но опять же, не их словарные значения ).
Я заметил одну вещь: хотя возвращаемые значения верны, при следующем вызове OnInspectorGUI() словари сбрасываются.
Я ломаю голову и не могу хоть убей понять, почему сбрасываются только словари, но не int и строка. Я пометил их и класс, частью которого они являются, как [Сериализуемые]. Я также пробовал использовать List вместо словарей для хранения данных, но проблема осталась.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-complex