using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; /// /// 渐变效果 右上->左下的渐变 /// [AddComponentMenu("UI/Effects/UIEfxGradient")] public class UIEfxGradient : BaseMeshEffect { public Color32 m_colorBottomLeft = Color.white; public Color32 m_colorTopRight = Color.black; public override void ModifyMesh(VertexHelper vh) { if (!IsActive()) { return; } var count = vh.currentVertCount; if (count == 0) return; var vertexs = new List(); for (var i = 0; i < count; i++) { var vertex = new UIVertex(); vh.PopulateUIVertex(ref vertex, i); vertexs.Add(vertex); } float posX = vertexs[0].position.x; float posY = vertexs[0].position.y; var topY = posY; var bottomY = posY; var leftX = posX; var rightX = posX; 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 < leftX) leftX = x; else if (x > rightX) rightX = x; } var height = topY - bottomY; var weith = rightX - leftX; for (var i = 0; i < count; i++) { var vertex = vertexs[i]; var color1 = Color32.Lerp(m_colorBottomLeft, m_colorTopRight, (vertex.position.y - bottomY) / height); var color2 = Color32.Lerp(m_colorBottomLeft, m_colorTopRight, (vertex.position.x - leftX) / weith); var color = Color32.Lerp(color1, color2, 0.5f); vertex.color = color; vh.SetUIVertex(vertex, i); } } }