ToggleEditor.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using UnityEditor.SceneManagement;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace UnityEditor.UI
  5. {
  6. [CustomEditor(typeof(Toggle), true)]
  7. [CanEditMultipleObjects]
  8. /// <summary>
  9. /// Custom Editor for the Toggle Component.
  10. /// Extend this class to write a custom editor for a component derived from Toggle.
  11. /// </summary>
  12. public class ToggleEditor : SelectableEditor
  13. {
  14. SerializedProperty m_OnValueChangedProperty;
  15. SerializedProperty m_TransitionProperty;
  16. SerializedProperty m_GraphicProperty;
  17. SerializedProperty m_GroupProperty;
  18. SerializedProperty m_IsOnProperty;
  19. protected override void OnEnable()
  20. {
  21. base.OnEnable();
  22. m_TransitionProperty = serializedObject.FindProperty("toggleTransition");
  23. m_GraphicProperty = serializedObject.FindProperty("graphic");
  24. m_GroupProperty = serializedObject.FindProperty("m_Group");
  25. m_IsOnProperty = serializedObject.FindProperty("m_IsOn");
  26. m_OnValueChangedProperty = serializedObject.FindProperty("onValueChanged");
  27. }
  28. public override void OnInspectorGUI()
  29. {
  30. base.OnInspectorGUI();
  31. EditorGUILayout.Space();
  32. serializedObject.Update();
  33. Toggle toggle = serializedObject.targetObject as Toggle;
  34. EditorGUI.BeginChangeCheck();
  35. EditorGUILayout.PropertyField(m_IsOnProperty);
  36. if (EditorGUI.EndChangeCheck())
  37. {
  38. EditorSceneManager.MarkSceneDirty(toggle.gameObject.scene);
  39. ToggleGroup group = m_GroupProperty.objectReferenceValue as ToggleGroup;
  40. toggle.isOn = m_IsOnProperty.boolValue;
  41. if (group != null && group.isActiveAndEnabled && toggle.IsActive())
  42. {
  43. if (toggle.isOn || (!group.AnyTogglesOn() && !group.allowSwitchOff))
  44. {
  45. toggle.isOn = true;
  46. group.NotifyToggleOn(toggle);
  47. }
  48. }
  49. }
  50. EditorGUILayout.PropertyField(m_TransitionProperty);
  51. EditorGUILayout.PropertyField(m_GraphicProperty);
  52. EditorGUI.BeginChangeCheck();
  53. EditorGUILayout.PropertyField(m_GroupProperty);
  54. if (EditorGUI.EndChangeCheck())
  55. {
  56. EditorSceneManager.MarkSceneDirty(toggle.gameObject.scene);
  57. ToggleGroup group = m_GroupProperty.objectReferenceValue as ToggleGroup;
  58. toggle.group = group;
  59. }
  60. EditorGUILayout.Space();
  61. // Draw the event notification options
  62. EditorGUILayout.PropertyField(m_OnValueChangedProperty);
  63. serializedObject.ApplyModifiedProperties();
  64. }
  65. }
  66. }