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*.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*;*
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?

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,