- Home /
Using EditorGUI.FloatField With Custom Class Inspectors?
I've been trying to make a custom class inspector that can show the variable + a label for the variable. I've been using the EditorGUI.PropertyField but that can't show both the variable and its label at the same time. It seems that EditorGUI.FloatField is what i'd like to use but anytime I try the value doesn't show up.
Here's some example code and what it looks like.
@CustomPropertyDrawer (MyClass)
class MyClass_d extends PropertyDrawer
{
var testFloat : float = 10;
function OnGUI(position : Rect, property : SerializedProperty, label : GUIContent)
{
EditorGUI.BeginProperty (position, label, property);
var amountRect = new Rect (position.x, position.y, 150, position.height);
testFloat = EditorGUI.FloatField (amountRect, "My Float = ", testFloat);
EditorGUI.EndProperty();
}
}
Answer by poday · Apr 26, 2013 at 02:52 PM
There are a few different problems with your code.
While you can declare member variables inside a PropertyDrawer, it's probably not going to behave how you expect. There is only a single instance of each PropertyDrawer class; so if you had multiple instances MyClass in the inspector they would all update when any of them is changed and they would all show the same value.
Second you need to modify the property variable. This variable is what actually stores the data in the class. Unfortunately you can't just use the passed in property variable inside a EditorGUI.PropertyField call as that would cause recursion (the method would just keep trying to call itself until it causes an exception). So you have to either find a sub-property inside the property variable via property.FindPropertyRelative("sub-property-name") or use the correct accessor to get a value from the property variable, ex: property.floatValue
Also from the screenshot it looks like you're trying to modify a class that extends from MonoBehaviour. From my using a PropertyDrawer on a MonoBehaviour class has had some odd bugs and edge cases. I expect that PropertyDrawers are reserved for data contained inside a component and not the component itself. I'd suggest looking into Custom Editors for controlling how MonoBehaviours look.
All that aside, try this code (assuming MyClass is not a MonoBehaviour):
@CustomPropertyDrawer (MyClass)
class MyClass_d extends PropertyDrawer
{
function OnGUI(position : Rect, property : SerializedProperty, label : GUIContent)
{
EditorGUI.BeginProperty (position, label, property);
var amountRect = new Rect (position.x, position.y, 150, position.height);
var floatProperty = property.FindPropertyRelative("testFloat");
EditorGUI.PropertyField(amountRect, floatProperty, "My Float = ");
EditorGUI.EndProperty();
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613095900im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Custom inspector editor - how to put new editor fields in a specific place 1 Answer
Asset: Pimp my Editor - Javascript Help 0 Answers
EditorGUILayout.PropertyField cannot draw custom class? 2 Answers
Refreshing custom Inspector window while playing 1 Answer
How can i display Dictionary informations in Custom Inspector ? 0 Answers