yyl
6 小时以前 e18e6f74e211bfb65747cac364f942b41620645c
Main/Component/UI/Core/GradientText.cs
@@ -31,7 +31,6 @@
        Horizontal,     // 水平渐变
        Vertical,       // 垂直渐变
        Diagonal,       // 对角线渐变
        Radial,         // 径向渐变
        Custom          // 自定义四角颜色
    }
@@ -154,19 +153,7 @@
        SetVerticesDirty();
    }
    /// <summary>
    /// 设置径向渐变颜色
    /// </summary>
    public void SetRadialGradient(Color centerColor, Color edgeColor)
    {
        m_GradientType = GradientType.Radial;
        m_TopLeftColor = edgeColor;
        m_TopRightColor = edgeColor;
        m_BottomLeftColor = edgeColor;
        m_BottomRightColor = edgeColor;
        // 径向渐变需要在顶点着色器中处理
        SetVerticesDirty();
    }
    protected override void OnPopulateMesh(VertexHelper vh)
    {
@@ -221,21 +208,21 @@
                return Color.Lerp(m_TopLeftColor, m_TopRightColor, x);
                
            case GradientType.Vertical:
                return Color.Lerp(m_TopLeftColor, m_BottomLeftColor, y);
                return Color.Lerp(m_TopLeftColor, m_BottomLeftColor, 1 - y);
                
            case GradientType.Diagonal:
                return Color.Lerp(m_TopLeftColor, m_BottomRightColor, (x + y) * 0.5f);
                // 对角线渐变:从左上到右下
                // 使用更准确的对角线计算,确保从左上到右下的渐变
                var diagonalFactor = Mathf.Clamp01((x + (1 - y)) * 0.5f);
                return Color.Lerp(m_TopLeftColor, m_BottomRightColor, diagonalFactor);
                
            case GradientType.Radial:
                var center = new Vector2(0.5f, 0.5f);
                var distance = Vector2.Distance(new Vector2(x, y), center);
                return Color.Lerp(m_TopLeftColor, m_BottomRightColor, distance * 2f);
                
            case GradientType.Custom:
                // 双线性插值
                // 双线性插值:修正Y轴方向
                var topColor = Color.Lerp(m_TopLeftColor, m_TopRightColor, x);
                var bottomColor = Color.Lerp(m_BottomLeftColor, m_BottomRightColor, x);
                return Color.Lerp(topColor, bottomColor, y);
                return Color.Lerp(topColor, bottomColor, 1 - y);
                
            default:
                return color;