using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.UI; namespace UnityEditor.UI { [CustomEditor(typeof(Toggle), true)] [CanEditMultipleObjects] /// /// Custom Editor for the Toggle Component. /// Extend this class to write a custom editor for a component derived from Toggle. /// public class ToggleEditor : SelectableEditor { SerializedProperty m_OnValueChangedProperty; SerializedProperty m_TransitionProperty; SerializedProperty m_GraphicProperty; SerializedProperty m_GroupProperty; SerializedProperty m_IsOnProperty; protected override void OnEnable() { base.OnEnable(); m_TransitionProperty = serializedObject.FindProperty("toggleTransition"); m_GraphicProperty = serializedObject.FindProperty("graphic"); m_GroupProperty = serializedObject.FindProperty("m_Group"); m_IsOnProperty = serializedObject.FindProperty("m_IsOn"); m_OnValueChangedProperty = serializedObject.FindProperty("onValueChanged"); } public override void OnInspectorGUI() { base.OnInspectorGUI(); EditorGUILayout.Space(); serializedObject.Update(); Toggle toggle = serializedObject.targetObject as Toggle; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(m_IsOnProperty); if (EditorGUI.EndChangeCheck()) { if (!Application.isPlaying) EditorSceneManager.MarkSceneDirty(toggle.gameObject.scene); ToggleGroup group = m_GroupProperty.objectReferenceValue as ToggleGroup; toggle.isOn = m_IsOnProperty.boolValue; if (group != null && group.isActiveAndEnabled && toggle.IsActive()) { if (toggle.isOn || (!group.AnyTogglesOn() && !group.allowSwitchOff)) { toggle.isOn = true; group.NotifyToggleOn(toggle); } } } EditorGUILayout.PropertyField(m_TransitionProperty); EditorGUILayout.PropertyField(m_GraphicProperty); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(m_GroupProperty); if (EditorGUI.EndChangeCheck()) { if (!Application.isPlaying) EditorSceneManager.MarkSceneDirty(toggle.gameObject.scene); ToggleGroup group = m_GroupProperty.objectReferenceValue as ToggleGroup; toggle.group = group; } EditorGUILayout.Space(); // Draw the event notification options EditorGUILayout.PropertyField(m_OnValueChangedProperty); serializedObject.ApplyModifiedProperties(); } } }