using UnityEngine; using UnityEditor.AnimatedValues; using UnityEngine.UI; namespace UnityEditor.UI { [CustomEditor(typeof(AspectRatioFitter), true)] [CanEditMultipleObjects] /// /// Custom Editor for the AspectRatioFitter component. /// Extend this class to write a custom editor for a component derived from AspectRatioFitter. /// public class AspectRatioFitterEditor : SelfControllerEditor { SerializedProperty m_AspectMode; SerializedProperty m_AspectRatio; AnimBool m_ModeBool; private AspectRatioFitter aspectRatioFitter; protected virtual void OnEnable() { m_AspectMode = serializedObject.FindProperty("m_AspectMode"); m_AspectRatio = serializedObject.FindProperty("m_AspectRatio"); aspectRatioFitter = target as AspectRatioFitter; m_ModeBool = new AnimBool(m_AspectMode.intValue != 0); m_ModeBool.valueChanged.AddListener(Repaint); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(m_AspectMode); m_ModeBool.target = m_AspectMode.intValue != 0; if (EditorGUILayout.BeginFadeGroup(m_ModeBool.faded)) EditorGUILayout.PropertyField(m_AspectRatio); EditorGUILayout.EndFadeGroup(); serializedObject.ApplyModifiedProperties(); if (aspectRatioFitter) { if (!aspectRatioFitter.IsAspectModeValid()) ShowNoParentWarning(); if (!aspectRatioFitter.IsComponentValidOnObject()) ShowCanvasRenderModeInvalidWarning(); } base.OnInspectorGUI(); } protected virtual void OnDisable() { aspectRatioFitter = null; m_ModeBool.valueChanged.RemoveListener(Repaint); } private static void ShowNoParentWarning() { var text = L10n.Tr("You cannot use this Aspect Mode because this Component's GameObject does not have a parent object."); EditorGUILayout.HelpBox(text, MessageType.Warning, true); } private static void ShowCanvasRenderModeInvalidWarning() { var text = L10n.Tr("You cannot use this Aspect Mode because this Component is attached to a Canvas with a fixed width and height."); EditorGUILayout.HelpBox(text, MessageType.Warning, true); } } }