- 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,
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                