Custom Property Drawer never sets the property
So, I'm making a custom property drawer for one class, in order to set and manipulate its values in a comprehensive way. Also, because Unity does not provide any way of serializing Hashtables. I create a PropertyDrawer class and set it up like this:
[CustomPropertyDrawer(typeof(TrackFragment.NextList))]
public class SegmentProbabilityEditor: PropertyDrawer {
GameObject newTrack;
float newOdds;
public override void OnGUI(Rect pos, SerializedProperty property, GUIContent label) {
TrackFragment.NextList nextList = (TrackFragment.NextList) property.objectReferenceValue;
if (nextList == null) {
nextList = new TrackFragment.NextList();
}
//Lots of stuff here to draw the current value of the property
[...]
//New Entry
trackPos.y += 0.5f * lineH;
newTrack = (GameObject) EditorGUI.ObjectField(trackPos, newTrack, typeof(GameObject), false);
newOdds = 0f;
EditorGUI.indentLevel = originalIndent;
EditorGUI.EndProperty();
if (GUI.changed) {
Debug.Log("Ch-ch-ch-changes!");
Debug.Log(newTrack);
//Add new item!
if (newTrack != null)
{
TrackFragment nextFrag = newTrack.GetComponent<TrackFragment>();
if (nextFrag != null) {
nextList.Set(nextFrag, 0f);
}
else
{
Debug.LogWarning(string.Format("Selected object({0}) has no Track Fragment component!", newTrack.name));
}
Debug.Log(nextList.Length());
property.objectReferenceValue = nextList;
newTrack = null;
property.serializedObject.Update();
property.serializedObject.ApplyModifiedProperties();
}
}
}
//Other functions like GetPropertyHeight
[...]
}
At the top i'm constructing a new object in case the current value comes up null (it always does), then draw the current state of the property, then one field that should be used to add new values into it, and finally the GUI.changed block that adds the new value to the property.
At first sight it works, the nextList variable has the new value added, the Debug log there prints (1). Then the final lines should be updating the value, but they aren't. The value of the property always comes up null again at the beginning of OnGUI. The inspector box looks fine:
But it never changes. I've been looking everywhere about how to do it, but none of the solutions are working. Anyone has any idea of what could be the problem?
UPDATE: I've also tried accessing property.serializedObject.targetObject, and the same is happening(the child object is null at the end of the function), and I'm starting to suspect it might be because I'm using a Hashtable in there. Is that a clue?
Your answer
Follow this Question
Related Questions
Why am I getting this error with my BannerAD (Admob) 1 Answer
What does the NullReferenceException mean? and just how do I fix this problem? 0 Answers
fbx exporter 3.20 does not export model [error message; cannot be null] 0 Answers
Why doesn't it work? 0 Answers
Where is the () and + list, in onclick, in the Button UI 1 Answer