using UnityEditor; using UnityEngine; using UnityEngine.UI; [CustomEditor(typeof(GradientText), true), CanEditMultipleObjects] public class GradientTextEditor : UnityEditor.UI.TextEditor { private SerializedProperty m_GradientType; private SerializedProperty m_TopLeftColor; private SerializedProperty m_TopRightColor; private SerializedProperty m_BottomLeftColor; private SerializedProperty m_BottomRightColor; private SerializedProperty m_UseGradient; protected override void OnEnable() { base.OnEnable(); m_GradientType = serializedObject.FindProperty("m_GradientType"); m_TopLeftColor = serializedObject.FindProperty("m_TopLeftColor"); m_TopRightColor = serializedObject.FindProperty("m_TopRightColor"); m_BottomLeftColor = serializedObject.FindProperty("m_BottomLeftColor"); m_BottomRightColor = serializedObject.FindProperty("m_BottomRightColor"); m_UseGradient = serializedObject.FindProperty("m_UseGradient"); } public override void OnInspectorGUI() { base.OnInspectorGUI(); EditorGUILayout.Space(); EditorGUILayout.LabelField("渐变设置", EditorStyles.boldLabel); serializedObject.Update(); EditorGUILayout.PropertyField(m_UseGradient, new GUIContent("启用渐变")); if (m_UseGradient.boolValue) { EditorGUILayout.PropertyField(m_GradientType, new GUIContent("渐变类型")); var gradientType = (GradientText.GradientType)m_GradientType.enumValueIndex; switch (gradientType) { case GradientText.GradientType.Horizontal: EditorGUILayout.PropertyField(m_TopLeftColor, new GUIContent("左侧颜色")); EditorGUILayout.PropertyField(m_TopRightColor, new GUIContent("右侧颜色")); break; case GradientText.GradientType.Vertical: EditorGUILayout.PropertyField(m_TopLeftColor, new GUIContent("顶部颜色")); EditorGUILayout.PropertyField(m_BottomLeftColor, new GUIContent("底部颜色")); break; case GradientText.GradientType.Diagonal: EditorGUILayout.PropertyField(m_TopLeftColor, new GUIContent("左上颜色")); EditorGUILayout.PropertyField(m_BottomRightColor, new GUIContent("右下颜色")); break; case GradientText.GradientType.Radial: EditorGUILayout.PropertyField(m_TopLeftColor, new GUIContent("中心颜色")); EditorGUILayout.PropertyField(m_BottomRightColor, new GUIContent("边缘颜色")); break; case GradientText.GradientType.Custom: EditorGUILayout.PropertyField(m_TopLeftColor, new GUIContent("左上颜色")); EditorGUILayout.PropertyField(m_TopRightColor, new GUIContent("右上颜色")); EditorGUILayout.PropertyField(m_BottomLeftColor, new GUIContent("左下颜色")); EditorGUILayout.PropertyField(m_BottomRightColor, new GUIContent("右下颜色")); break; } // 快速设置按钮 EditorGUILayout.Space(); EditorGUILayout.LabelField("快速设置", EditorStyles.miniLabel); GUILayout.BeginHorizontal(); if (GUILayout.Button("红→蓝")) { SetHorizontalGradient(Color.red, Color.blue); } if (GUILayout.Button("绿→黄")) { SetHorizontalGradient(Color.green, Color.yellow); } if (GUILayout.Button("彩虹")) { SetRainbowGradient(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("金→橙")) { SetVerticalGradient(Color.yellow, new Color(1f, 0.5f, 0f)); } if (GUILayout.Button("紫→粉")) { SetVerticalGradient(new Color(0.5f, 0f, 0.5f), new Color(1f, 0.4f, 0.7f)); } GUILayout.EndHorizontal(); } serializedObject.ApplyModifiedProperties(); } private void SetHorizontalGradient(Color leftColor, Color rightColor) { m_GradientType.enumValueIndex = (int)GradientText.GradientType.Horizontal; m_TopLeftColor.colorValue = leftColor; m_BottomLeftColor.colorValue = leftColor; m_TopRightColor.colorValue = rightColor; m_BottomRightColor.colorValue = rightColor; } private void SetVerticalGradient(Color topColor, Color bottomColor) { m_GradientType.enumValueIndex = (int)GradientText.GradientType.Vertical; m_TopLeftColor.colorValue = topColor; m_TopRightColor.colorValue = topColor; m_BottomLeftColor.colorValue = bottomColor; m_BottomRightColor.colorValue = bottomColor; } private void SetRainbowGradient() { m_GradientType.enumValueIndex = (int)GradientText.GradientType.Horizontal; m_TopLeftColor.colorValue = Color.red; m_BottomLeftColor.colorValue = Color.red; m_TopRightColor.colorValue = Color.blue; m_BottomRightColor.colorValue = Color.blue; } }