CirclePropertyDrawer.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using UnityEditor;
  2. using UnityEngine;
  3. namespace MPUIKIT.Editor {
  4. [CustomPropertyDrawer(typeof(Circle))]
  5. public class CirclePropertyDrawer : PropertyDrawer{
  6. public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
  7. EditorGUI.BeginProperty(position, label, property);
  8. {
  9. Rect radiusRect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight);
  10. Rect toolBarRect = new Rect(position.x + EditorGUIUtility.labelWidth,
  11. position.y + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing,
  12. position.width - EditorGUIUtility.labelWidth, EditorGUIUtility.singleLineHeight);
  13. SerializedProperty spFitCircleRadius = property.FindPropertyRelative("m_FitRadius");
  14. bool FitCirlce = spFitCircleRadius.boolValue;
  15. EditorGUI.BeginDisabledGroup(FitCirlce);
  16. {
  17. EditorGUI.PropertyField(radiusRect, property.FindPropertyRelative("m_Radius"),
  18. new GUIContent("Radius"));
  19. }
  20. EditorGUI.EndDisabledGroup();
  21. EditorGUI.BeginChangeCheck();
  22. EditorGUI.showMixedValue = spFitCircleRadius.hasMultipleDifferentValues;
  23. {
  24. EditorGUILayout.BeginHorizontal();
  25. {
  26. GUILayout.Space(EditorGUIUtility.labelWidth);
  27. FitCirlce = GUI.Toolbar(toolBarRect, FitCirlce ? 1 : 0, new[] {"Free", "Fit"}) == 1;
  28. }
  29. EditorGUILayout.EndHorizontal();
  30. }
  31. EditorGUI.showMixedValue = false;
  32. if (EditorGUI.EndChangeCheck()) {
  33. spFitCircleRadius.boolValue = FitCirlce;
  34. }
  35. }
  36. EditorGUI.EndProperty();
  37. }
  38. public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
  39. return EditorGUIUtility.singleLineHeight * 2 + EditorGUIUtility.standardVerticalSpacing * 2;
  40. }
  41. }
  42. }