UGUI渐变色

只实现了横纵两个方向的两个色值渐变,未能实现Gradient多色,后面会寻找更好地方法。

/*******************************************************************************
* 版本声明:v1.0.0
* 类 名 称:GradientEffect
* 创建日期:2020-06-02 17:05:44
* 作者名称:末零
* 功能描述:渐变色
* 修改记录:
* 
******************************************************************************/

using System.Collections.Generic;

using UnityEngine;
using UnityEngine.UI;

namespace LastZero
{
    /// <summary>
    /// 渐变色
    /// </summary>
    public class GradientEffect : BaseMeshEffect
    {
        public enum Direction
        {
            Horizontal,
            Vertical
        }

        public Direction direction;

        public Color32 startColor = Color.white;
        public Color32 endColor = Color.black;

        public override void ModifyMesh(VertexHelper vh)
        {
            if (!IsActive())
            {
                return;
            }

            var count = vh.currentVertCount;
            if (count == 0)
                return;

            var vertexs = new List<UIVertex>();
            for (var i = 0; i < count; i++)
            {
                var vertex = new UIVertex();
                vh.PopulateUIVertex(ref vertex, i);
                vertexs.Add(vertex);
            }

            switch (direction)
            {
                case Direction.Horizontal:
                    var leftX = vertexs[0].position.x;
                    var rightX = vertexs[0].position.x;

                    for (var i = 1; i < count; i++)
                    {
                        var x = vertexs[i].position.x;
                        if (x < leftX)
                        {
                            leftX = x;
                        }
                        else if (x > rightX)
                        {
                            rightX = x;
                        }
                    }

                    var width = rightX - leftX;
                    for (var i = 0; i < count; i++)
                    {
                        var vertex = vertexs[i];

                        var color = Color32.Lerp(startColor, endColor, (vertex.position.x - leftX) / width);

                        vertex.color = color;

                        vh.SetUIVertex(vertex, i);
                    }
                    break;
                case Direction.Vertical:
                    var topY = vertexs[0].position.y;
                    var bottomY = vertexs[0].position.y;

                    for (var i = 1; i < count; i++)
                    {
                        var y = vertexs[i].position.y;
                        if (y > topY)
                        {
                            topY = y;
                        }
                        else if (y < bottomY)
                        {
                            bottomY = y;
                        }
                    }

                    var height = topY - bottomY;
                    for (var i = 0; i < count; i++)
                    {
                        var vertex = vertexs[i];

                        var color = Color32.Lerp(endColor, startColor, (vertex.position.y - bottomY) / height);

                        vertex.color = color;

                        vh.SetUIVertex(vertex, i);
                    }
                    break;
            }
        }
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值