Unity 为 UGUI Text 文字添加颜色渐变效果

20 篇文章 2 订阅
[AddComponentMenu("UI/Effects/Gradient")]
public class TextGradient : BaseMeshEffect
{
    [SerializeField] Color32 topColor = Color.white;
    [SerializeField] Color32 bottomColor = Color.black;


    public override void ModifyMesh(VertexHelper vh)
    {
        if(vh.currentVertCount <= 0) return;

        //取得模型
        float bottomY = -1;
        float topY = -1;

        for (int i = 0; i < vh.currentVertCount; i++)
        {
            UIVertex v = new UIVertex();
            vh.PopulateUIVertex(ref v, i);

            if (bottomY == -1)
                bottomY = v.position.y;
            if (topY == -1)
                topY = v.position.y;

            if (v.position.y > topY)
                topY = v.position.y;
            else if (v.position.y < bottomY)
                bottomY = v.position.y;
        }

        //混色
        UIVertex vx = new UIVertex();
        vh.PopulateUIVertex(ref vx, 0);

        Color32 topColor = new Color32((byte)((this.topColor.r + vx.color.r) / 2), (byte)((this.topColor.g + vx.color.g) / 2), (byte)((this.topColor.b + vx.color.b) / 2), 255);
        Color32 bottomColor = new Color32((byte)((this.bottomColor.r + vx.color.r) / 2), (byte)((this.bottomColor.g + vx.color.g) / 2), (byte)((this.bottomColor.b + vx.color.b) / 2), 255);

        //上色
        float uiElementHeight = topY - bottomY;
        for (int i = 0; i < vh.currentVertCount; i++)
        {
            UIVertex v = new UIVertex();
            vh.PopulateUIVertex(ref v, i);

            v.color = Color32.Lerp(bottomColor, topColor, (v.position.y - bottomY) / uiElementHeight);
            vh.SetUIVertex(v, i);
        }
    }

}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值