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;
|
}
|
}
|