- Home /
Question by
Verfin · May 27, 2014 at 08:37 AM ·
editorpropertydrawer
Disabling a button in custom editor script leaves ghost buttons
I have a simple editor script inside the editor folder,
[CustomPropertyDrawer(typeof(System.Object), true)]
public class Buttons : PropertyDrawer
{
public static bool onoff;
bool save;
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
if (onoff)
{
save = EditorGUI.Toggle(new Rect(0, position.yMin, 15, 15), save);
}
DrawDefaultProperty(position, property, label);
}
private void DrawDefaultProperty(Rect position, SerializedProperty property, GUIContent label)
{
Dictionary<int, PropertyDrawer> s_dictionary = typeof(PropertyDrawer).GetField("s_PropertyDrawers", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).GetValue(null) as Dictionary<int, PropertyDrawer>;
if (s_dictionary != null)
{
foreach (KeyValuePair<int, PropertyDrawer> entry in s_dictionary)
{
if (entry.Value == this)
{
s_dictionary[entry.Key] = null;
EditorGUI.PropertyField(position, property, label, true);
s_dictionary[entry.Key] = this;
return;
}
}
}
}
}
a menu script to control the onoff boolean
public class ToggleButtons : MonoBehaviour
{
[MenuItem("myMenu/Toggle Buttons")]
private static void ShowGUI()
{
Buttons.onoff = !Buttons.onoff;
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
}
}
and a script that has some variables.
public class myBehaviour : MonoBehaviour {
public int int1;
public float float1;
}
The problem is, the boolean/repaint combo isn't enough to get rid of the toggle buttons all the time and a field needs to be clicked or the whole thing needs to be unselected / selected or a component with a foldout (or the component itself) opened or closed in order to make the editor refresh itself. How can I make the editorGUI refresh in the same way selecting a field does?
Comment