| | |
| | | Horizontal, // 水平渐变 |
| | | Vertical, // 垂直渐变 |
| | | Diagonal, // 对角线渐变 |
| | | Radial, // 径向渐变 |
| | | Custom // 自定义四角颜色 |
| | | } |
| | | |
| | |
| | | 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) |
| | | { |
| | |
| | | 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; |