当前位置:网站首页>Unity Text三重渐变色
Unity Text三重渐变色
2022-08-08 22:07:00 【w0100746363】
[AddComponentMenu ("UI/Effects/ThreeColorGradient")]
[RequireComponent(typeof(Text))]
public class ThreeColorGradient : BaseMeshEffect
{
public Color colorTop = Color.white;
public Color colorCenter = Color.grey;
public Color colorBottom = Color.black;
public bool MultiplyTextColor = false;
protected ThreeColorGradient()
{}
public static Color32 Multiply(Color32 a, Color32 b)
{
a.r = (byte)((a.r * b.r) >> 8);
a.g = (byte)((a.g * b.g) >> 8);
a.b = (byte)((a.b * b.b) >> 8);
a.a = (byte)((a.a * b.a) >> 8);
return a;
}
private void ModifyVertices(VertexHelper vh)
{
List<UIVertex> verts = new List<UIVertex>(vh.currentVertCount);
vh.GetUIVertexStream(verts);
vh.Clear();
int step = 6;
for (int i = 0; i < verts.Count; i += step) {
//6 point
var tl = multiplyColor(verts[i+0], colorTop);
var tr = multiplyColor (verts [i+1], colorTop);
var bl = multiplyColor (verts [i+4], colorBottom);
var br = multiplyColor (verts [i+3], colorBottom);
var cl = calcCenterVertex(verts[i+0], verts [i+4]);
var cr = calcCenterVertex (verts [i+1], verts [i+2]);
vh.AddVert (tl);
vh.AddVert (tr);
vh.AddVert (cr);
vh.AddVert (cr);
vh.AddVert (cl);
vh.AddVert (tl);
vh.AddVert (cl);
vh.AddVert (cr);
vh.AddVert (br);
vh.AddVert (br);
vh.AddVert (bl);
vh.AddVert (cl);
}
for (int i = 0; i < vh.currentVertCount; i += 12) {
vh.AddTriangle (i + 0, i + 1, i + 2);
vh.AddTriangle (i + 3, i + 4, i + 5);
vh.AddTriangle (i + 6, i + 7, i + 8);
vh.AddTriangle (i + 9, i + 10, i + 11);
}
}
private UIVertex multiplyColor(UIVertex vertex, Color color)
{
if (MultiplyTextColor)
vertex.color = Multiply (vertex.color, color);
else
vertex.color = color;
return vertex;
}
private UIVertex calcCenterVertex(UIVertex top, UIVertex bottom)
{
UIVertex center = new UIVertex();
center.normal = (top.normal + bottom.normal) / 2;
center.position = (top.position + bottom.position) / 2;
center.tangent = (top.tangent + bottom.tangent) / 2;
center.uv0 = (top.uv0 + bottom.uv0) / 2;
center.uv1 = (top.uv1 + bottom.uv1) / 2;
if (MultiplyTextColor) {
//multiply color
var color = Color.Lerp(top.color, bottom.color, 0.5f);
center.color = Multiply (color, colorCenter);
} else {
center.color = colorCenter;
}
return center;
}
#region implemented abstract members of BaseMeshEffect
public override void ModifyMesh(VertexHelper vh)
{
if(!this.IsActive())
{
return;
}
ModifyVertices(vh);
}
#endregion
}
边栏推荐
猜你喜欢
随机推荐
Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions论文以及代码解析
How is the commission for online account opening reduced?Is it safe to open an account with an online account manager?
《scala 编程(第3版)》学习笔记
我的世界常用快捷键指令大全
6.8.3 sigqueue函数
深度学习-神经网络原理2
Baidu IP query
C盘的空间管理
2020-03-09
2020-03-16
彻底理解 volatile 关键字及应用场景,面试必问,小白都能看懂!
测试/开发程序员,如何跳出技术瓶颈?一年两年......
Conformer论文以及代码解析(上)
基于阿里云的基础架构设施保障(二)IAAS云存储
网上开户佣金是怎么调低的?网上客户经理开户安全吗
pyspark资源配置
"scala programming (3rd edition)" study notes
Mysql 主键自增长
IPv6 私有地址
AutoAssign论文解析









