三国卡牌客户端基础资源仓库
hch
2 天以前 9fe74c79db3c3d6047651d84a278eb7a8555a513
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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;
    }
}