- Home /
Question by
Rotary-Heart · Sep 04, 2015 at 08:11 PM ·
c#editorinspector
Custom inspector field resetting when compile or play
I created a custom inspector for a class that only contains a list that the can be created with the editor. My issue is that every time that unity compile or I click play my list gets back to default value, which is empty.
Here's my class
[System.Serializable]
public class LiquidProperties
{
[System.Serializable]
public class Properties
{
[SerializeField]
public string name = "name";
[SerializeField]
public float viscosity, evaporation;
}
[SerializeField]
public static List<Properties> liquids = new List<Properties>();
}
As you can see I already tried with SerializeField and System.Serializable but it doesn't work.
Here's my inspector code:
public override void OnInspectorGUI()
{
ShowLiquidsList();
List<string> liquidsNames = new List<string>();
for (int i = 0; i < LiquidProperties.liquids.Count; i++)
liquidsNames.Add(LiquidProperties.liquids[i].name);
myTarget.liquid = EditorGUILayout.Popup("Liquid", myTarget.liquid, liquidsNames.ToArray());
if (GUI.changed)
EditorUtility.SetDirty(myTarget);
}
void ShowLiquidsList()
{
liquidsVisible = EditorGUILayout.Foldout(liquidsVisible, "Liquids");
if (liquidsVisible)
{
EditorGUI.indentLevel++;
int size = Mathf.Clamp(EditorGUILayout.IntField("Size", LiquidProperties.liquids.Count), 0, 1000);
while (size > LiquidProperties.liquids.Count)
{
LiquidProperties.liquids.Add(new LiquidProperties.Properties());
}
while (size < LiquidProperties.liquids.Count)
{
LiquidProperties.liquids.RemoveAt(LiquidProperties.liquids.Count - 1);
}
for (int i = 0; i < size; i++)
{
LiquidProperties.Properties prop = LiquidProperties.liquids[i];
EditorGUILayout.Space();
prop.name = EditorGUILayout.TextField("Name", prop.name);
prop.viscosity = EditorGUILayout.FloatField("Viscosity", prop.viscosity);
prop.evaporation = EditorGUILayout.FloatField("Evaporation", prop.evaporation);
EditorGUILayout.Space();
}
EditorGUI.indentLevel--;
}
}
As you can see I also tried with the SetDirty function but it doesn't work. What am I missing here?
Comment
Best Answer
Answer by BMayne · Sep 04, 2015 at 08:49 PM
Hey there,
You can't serialize Static fields. Because your list is static it will always and forever get cleared on recompile and play mode switch.
Cheers,