using UnityEngine; using UnityEditor; [CustomEditor(typeof(UIBase), true)] public class UIBaseInspector : Editor { SerializedProperty uiLayer; SerializedProperty uiName; SerializedProperty isMainUI; SerializedProperty supportParentChildRelation; SerializedProperty isPersistent; SerializedProperty maxIdleRounds; // 动画相关 SerializedProperty openAnimationType; SerializedProperty closeAnimationType; SerializedProperty animeRoot; SerializedProperty animeDuration; SerializedProperty scaleOverInOutCurve; SerializedProperty animationEase; SerializedProperty openMask; SerializedProperty clickEmptySpaceClose; void OnEnable() { uiLayer = serializedObject.FindProperty("uiLayer"); uiName = serializedObject.FindProperty("uiName"); isMainUI = serializedObject.FindProperty("isMainUI"); supportParentChildRelation = serializedObject.FindProperty("supportParentChildRelation"); isPersistent = serializedObject.FindProperty("isPersistent"); maxIdleRounds = serializedObject.FindProperty("maxIdleRounds"); openAnimationType = serializedObject.FindProperty("openAnimationType"); closeAnimationType = serializedObject.FindProperty("closeAnimationType"); animeRoot = serializedObject.FindProperty("_rectTransform"); animeDuration = serializedObject.FindProperty("animeDuration"); scaleOverInOutCurve = serializedObject.FindProperty("scaleOverInOutCurve"); animationEase = serializedObject.FindProperty("animationEase"); openMask = serializedObject.FindProperty("openMask"); clickEmptySpaceClose = serializedObject.FindProperty("clickEmptySpaceClose"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(uiLayer); EditorGUILayout.PropertyField(uiName); EditorGUILayout.PropertyField(isMainUI); EditorGUILayout.PropertyField(supportParentChildRelation); EditorGUILayout.Space(); EditorGUILayout.LabelField("持久化设置", EditorStyles.boldLabel); EditorGUILayout.PropertyField(isPersistent); if (isPersistent.boolValue) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(maxIdleRounds); EditorGUI.indentLevel--; } EditorGUILayout.Space(); EditorGUILayout.LabelField("动画设置", EditorStyles.boldLabel); EditorGUILayout.PropertyField(openAnimationType); EditorGUILayout.PropertyField(closeAnimationType); EditorGUILayout.PropertyField(animeRoot, new GUIContent("animeRoot (动画根节点)")); if (openAnimationType.enumValueIndex != 0 || closeAnimationType.enumValueIndex != 0) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(animeDuration); if ((UIAnimationType)openAnimationType.enumValueIndex == UIAnimationType.ScaleOverInOut) { EditorGUILayout.PropertyField(scaleOverInOutCurve); } EditorGUILayout.PropertyField(animationEase); EditorGUI.indentLevel--; } // 动画生效提示 if ((openAnimationType.enumValueIndex != 0 || closeAnimationType.enumValueIndex != 0) && animeRoot.objectReferenceValue == null) { EditorGUILayout.HelpBox("如需动画生效,必须指定 animeRoot(动画根节点)!", MessageType.Warning); } EditorGUILayout.Space(); EditorGUILayout.LabelField("遮罩设置", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); bool tempOpenMask = GUILayout.Toggle(openMask.boolValue, "开启遮罩", EditorStyles.miniButtonLeft); bool tempClickEmptyClose = GUILayout.Toggle(clickEmptySpaceClose.boolValue, "点击空白关闭", EditorStyles.miniButtonRight); if (EditorGUI.EndChangeCheck()) { if (tempOpenMask && tempClickEmptyClose) { if (openMask.boolValue != tempOpenMask) { clickEmptySpaceClose.boolValue = false; openMask.boolValue = true; } else { openMask.boolValue = false; clickEmptySpaceClose.boolValue = true; } } else { openMask.boolValue = tempOpenMask; clickEmptySpaceClose.boolValue = tempClickEmptyClose; } } EditorGUILayout.EndHorizontal(); serializedObject.ApplyModifiedProperties(); } }