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<UIVertex>();
|
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);
|
}
|
|
|
|
}
|