用BaseMeshEffect实现的渐变

原理就是按点的位置占长宽的百分比算出颜色

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;
/// <summary>
/// 渐变字体
/// </summary>
[AddComponentMenu("UI/Effects/Gradient")]
public class FontGradient : BaseMeshEffect
{
public Gradient useColor;
[Range(0,1)]
public float angle;
private RectTransform transImg
{
get
{
return transform as RectTransform;
}
}
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);
}

//var topY = vertexs[0].position.y;
//var bottomY = vertexs[0].position.y;
//var leftX = vertexs[0].position.x;
//var rightX = vertexs[0].position.x;

//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 x = vertexs[i].position.x;
// if (x > rightX)
// rightX = x;
// else if (x < leftX)
// leftX = x;
//}

var height = transImg.rect.height;
var width = transImg.rect.width;
//Vector2 center = new Vector2((leftX + rightX) * 0.5f, (bottomY + topY) * 0.5f);

for (var i = 0; i < count; i++)
{
var vertex = vertexs[i];
//if (usecenter)
//center = new Vector2(vertex.position.x * 0.5f, vertex.position.y * 0.5f);
//Vector2 a = new Vector2(vertex.position.x, vertex.position.y) - center;
//Vector2 r = new Vector2(Mathf.Sin((angle + 90) / 180 * Mathf.PI), Mathf.Cos((angle + 90) / 180 * Mathf.PI));
//float check = Vector2.Dot(a.normalized, r) * 0.5f + 0.5f;
//float x = Mathf.InverseLerp(leftX, rightX, vertex.position.x);
//float y = Mathf.InverseLerp(bottomY, topY, vertex.position.y);
float x = (vertex.position.x + width / 2) / width;
float y = (vertex.position.y + height / 2) / height;
float check = Mathf.Lerp(x, y, angle);
Color color = useColor.Evaluate(check);
vertex.color = graphic.color * color;
vh.SetUIVertex(vertex, i);
}
//NDebug.Log("check");
}
}

posted @   mc宇少  阅读(238)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示