Custom Inspector : Losing Data
Hi .. i have some problem with my custom inspector, my costum inspector have object field that held many game object , but when i tried to run the game the object field goes blank (null)
i already tried to googling but still not fix ... i tried to use the same script as other do from here : https://forum.unity3d.com/threads/custom-editor-losing-settings-on-play.130889/ and edit it just like this ....
using UnityEngine;
using System.Collections;
[System.Serializable]
public class HiddenObject {
public GameObject[,] enemy = new GameObject[6,60];
public int wave = 0;
public int[] enemyCount = new int[60] ;
public int[] enemyInTheScene = new int[60] ;
}
---------------------------------------------------------------------------------------------------------------------------------
using UnityEngine;
using System.Collections;
public class Inventory : MonoBehaviour {
public HiddenObject hiddenObject ;
}
---------------------------------------------------------------------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(Inventory))]
public class InventoryEditor : Editor {
private Inventory _inv;
void OnEnable(){
_inv = (Inventory)target;
}
public override void OnInspectorGUI (){
for (int i = 0; i < _inv.hiddenObject.wave; i++){
_inv.hiddenObject.enemyCount [i] = EditorGUILayout.IntField (_inv.hiddenObject.enemyCount[i]);
for (int a = 0; a < _inv.hiddenObject.enemyCount[i]; a++){
_inv.hiddenObject.enemy [i, a] = (GameObject)EditorGUILayout.ObjectField (_inv.hiddenObject.enemy[i,a],typeof(GameObject));
}
}
if (GUILayout.Button("Add Wave")){
_inv.hiddenObject.wave ++;
}
EditorUtility.SetDirty (_inv);
}
}
im still getting the same result, if i tried to play the game, the object field goes blank (null)
sorry if there was so many question like this, i was so frustated ... @_@ btw when i tried to use non multidimensional array for enemy, it was normal .. but i dont wanna use non dimensional array for an enemy
Answer by Adam-Mechtley · Dec 27, 2016 at 05:54 PM
The problem is that you are not serializing any of your changes (i.e. saving them to disk). There are a number of ways you can approach custom inspectors, but the most bulletproof is to use SerializedProperty. For example:
using UnityEditor;
using UnityEngine;
[CustomEditor (typeof (Inventory))]
public class InventoryEditor : Editor {
private SerializedProperty m_HiddenObject;
protected virtual void OnEnable () {
m_HiddenObject = this.serializedObject.FindProperty ("hiddenObject");
}
public override void OnInspectorGUI ()
{
this.serializedObject.Update ();
// your stuff here
this.serializedObject.ApplyModifiedProperties ();
}
}
Thank you! sorry for really-really long respond :D. it did help me, but i forgot to mark the answer. *4 years later just log in and notice i havent mark the answer yet XD
Your answer
Follow this Question
Related Questions
EndOfStreamException: Failed to read past end of stream. 0 Answers
Unity Custom Editor: 1 True Bool Only Within A Group 1 Answer
Custom Class Property Drawer 1 Answer
What is the editor callback for mouse hover 0 Answers
SetDirty not working in Custom Editor with Nested Custom Property drawer 1 Answer