using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine.UI;
|
|
[AddComponentMenu("UI/Effects/VerticalColorGradual")]
|
public class VerticalColorGradual:BaseMeshEffect {
|
|
[SerializeField]
|
private Color32 m_TopColor = Color.white;
|
public Color32 topColor {
|
get {
|
return m_TopColor;
|
}
|
set {
|
m_TopColor = value;
|
this.graphic.SetVerticesDirty();
|
}
|
}
|
|
[SerializeField]
|
private Color32 m_BottomColor = Color.black;
|
public Color32 bottomColor {
|
get {
|
return m_BottomColor;
|
}
|
set {
|
m_BottomColor = 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 bottomY = vertexList[0].position.y;
|
var topY = vertexList[0].position.y;
|
|
for(int i = 1;i < count;i++) {
|
var y = vertexList[i].position.y;
|
if(y > topY) {
|
topY = y;
|
}
|
else if(y < bottomY) {
|
bottomY = y;
|
}
|
}
|
|
var height = topY - bottomY;
|
for(int i = 0;i < count;i++) {
|
var uiVertex = vertexList[i];
|
uiVertex.color = Color32.Lerp(bottomColor,topColor,Mathf.Clamp01((uiVertex.position.y - (bottomY + height * center)) / height));
|
vertexList[i] = uiVertex;
|
}
|
}
|
|
vh.Clear();
|
vh.AddUIVertexTriangleStream(vertexList);
|
}
|
|
|
|
}
|