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