using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; [AddComponentMenu("UI/Effects/HorizontalColorGradual")] public class HorizontalColorGradual:BaseMeshEffect { [SerializeField] private Color32 m_LeftColor = Color.white; public Color32 leftColor { get { return m_LeftColor; } set { m_LeftColor = value; this.graphic.SetVerticesDirty(); } } [SerializeField] private Color32 m_RightColor = Color.black; public Color32 rightColor { get { return m_RightColor; } set { m_RightColor = value; this.graphic.SetVerticesDirty(); } } [Range(-1,1)] [SerializeField] private float m_Center = 0f; public float center { get { return m_Center; } set { m_Center = value; this.graphic.SetVerticesDirty(); } } public override void ModifyMesh(VertexHelper vh) { var vertexList = new List(); vh.GetUIVertexStream(vertexList); int count = vertexList.Count; if(count > 0) { var rightX = vertexList[0].position.y; var leftX = vertexList[0].position.y; for(int i = 1;i < count;i++) { var x = vertexList[i].position[0]; if(x < leftX) { leftX = x; } else if(x > rightX) { rightX = x; } } var width = rightX - leftX; for(int i = 0;i < count;i++) { var vertex = vertexList[i]; vertex.color = Color32.Lerp(leftColor,rightColor,Mathf.Clamp01((vertex.position[0] - (leftX + width * center)) / width)); vertexList[i] = vertex; } } vh.Clear(); vh.AddUIVertexTriangleStream(vertexList); } }