Unity Text 组件颜色渐变
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[AddComponentMenu("UI/Effects/doGradient")]
[RequireComponent(typeof(Text))]
public class Gradient : BaseMeshEffect
{
[SerializeField]
private Color32 topColor = Color.white;
[SerializeField]
private Color32 bottomColor = Color.white;
[Range(0 , 1)]
center = 0.5f
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive()) {
return;
}
var count = vh.currentVertCount;
if(count == 0)
{
return;
}
var verTex = new List<UIVertex>();
for( int 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;
for(int i = 0 ; i < count ; i++)
{
var y = varTexs[i].position.y;
if(y > topY)
{
topY = y ;
}
if( y < bottomY)
{
bottomY = y;
}
}
var height = topY - bottomY;
for(int i = 0 ; i < count ; i++)
{
var verTex = verTexs[i];
var color = CenterColor(bottomColor , topColor , (verTex.position.y - bottomY) / height);
verTex.color = color;
vh.SetUIVertex(verTex , i);
}
}
public Color32 CenterColor(Color32 bc , Color32 tc , float time)
{
if(center == 0)
{
return bc;
}
if(center == 1)
{
return tc;
}
var centerColor = Color32.Lerp(bottomColor , topColor , time);
var resultColor = tc;
if(time < center)
{
resultColor = Color32.Lerp(bottomColor , centerColor , time / center);
}
else
{
resultColor = Color32.Lerp(centerColor . topColor , (time - center) / ( 1 - center));
}
return resultColor;
}