Изменения внедорожных не сохранены для пользовательских полей редактора, которые хранят данные для сложного объектаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Изменения внедорожных не сохранены для пользовательских полей редактора, которые хранят данные для сложного объекта

Сообщение Anonymous »

Я создал пользовательский компонент, который использует пользовательский редактор. При сохранении Prefab сохраняются только некоторые из этих полей. В частности, нормальные поля, такие как int, string, float save просто отлично. Но у меня есть некоторые поля, которые хранят данные для следующей структуры: < /p>

Код: Выделить всё

    [System.Serializable]
public class MovementVariableModifierData
{
[ItemType]
public string modifierItemID = "";
public int modifierItemIdx;

[SerializeField]
public Dictionary multipliers = new Dictionary();

[SerializeField]
public Dictionary addends = new Dictionary();

}
Более того, класс, для которого используется редактор, фактически сохраняет данные в массиве этой структуры, то есть в массиве MovementVariableModifierData[] Modifiers. например:

Код: Выделить всё

public class MyClass
{
Modifiers = new MovementVariableModifierData[0];
}
В пользовательском инспекторе поля изменяются следующим образом внутри метода OnInspectorGUI:

Код: Выделить всё

// 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();
Таким образом, в основном целевой класс пользовательского редактора имеет массив движения Vvariablemodifierdata [] , и он содержит некоторые словарь , которые я пытаюсь Обновить и сохранить через пользовательский редактор. а затем закройте и вновь откройте его, значения, хранящиеся в словари сбросить. Значение, сохраненное в поле int/String of ModifieriTemid и ModifierItenIdx , и добавление нового движения variablemodifierdata записи в модификаторы массив также успешно сохраняет (но опять же, а не их словарь ). > Я отметил их и класс, в котором они являются как [сериализуемым]. Я также пытался использовать список вместо словарей для хранения данных и все еще иметь проблему.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-complex
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»