脚本如下:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[AddComponentMenu("UI/Effect/Gradient")]
public class Gradient : BaseMeshEffect
{
[SerializeField]
private Color32 leftColor = Color.black;
[SerializeField]
private Color32 rightColor = Color.black;
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive())
{
return;
}
var vertextList = new List<UIVertex>();
vh.GetUIVertexStream(vertextList);
int count = vertextList.Count;
ApplyGradient(vertextList,0,count);
vh.Clear();
vh.AddUIVertexTriangleStream(vertextList);
}
private void ApplyGradient(List<UIVertex> vertexList, int start, int end)
{
float leftX = 0;
float RightX = 0;
print(end);
for (int i = 0; i < end; i++)
{
float x = vertexList[i].position.x;
if (x > RightX)
{
RightX = x;
}
else if (x < leftX)
{
leftX = x;
}
}
float uiElementWeight = RightX - leftX;
for (int i = 0; i < end; i++)
{
UIVertex uiVertex = vertexList[i];
uiVertex.color = Color32.Lerp(leftColor,rightColor,(uiVertex.position.x-leftX)/uiElementWeight);
vertexList[i] = uiVertex;
}
}
}