using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 渐变
/// </summary>
[DisallowMultipleComponent]
[AddComponentMenu("UI/Effects/UIGradient")]
public class UIGradient : BaseMeshEffect
{
protected UIGradient()
{
}
/// <summary>
/// 渐变方向
/// </summary>
public enum EGradientDir
{
TopToBottom,
BottomToTop,
LeftToRight,
RightToLeft,
}
/// <summary>
/// 渐变方向
/// </summary>
[SerializeField]
EGradientDir m_GradientDir = EGradientDir.TopToBottom;
public EGradientDir GradientDir
{
get
{
return m_GradientDir;
}
set
{
m_GradientDir = value;
graphic.SetVerticesDirty();
}
}
//颜色数组
[SerializeField]
Color32[] m_ColorArray = new Color32[2] { Color.black, Color.white };
public Color32[] ColorArray
{
get
{
return m_ColorArray;
}
set
{
m_ColorArray = value;
graphic.SetVerticesDirty();
}
}
//顶点缓存
List<UIVertex> m_VertexCache = new List<UIVertex>();
//绘制使用的顶点列表
List<UIVertex> m_VertexList = new List<UIVertex>();
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive())
{
return;
}
vh.GetUIVertexStream(m_VertexCache);
switch (m_GradientDir)
{
case EGradientDir.TopToBottom:
ApplyGradient_TopToBottom(m_VertexCache);
break;
case EGradientDir.BottomToTop:
ApplyGradient_BottomToTop(m_VertexCache);
break;
case EGradientDir.LeftToRight:
ApplyGradient_LeftToRight(m_VertexCache);
break;
case EGradientDir.RightToLeft:
ApplyGradient_RightToLeft(m_VertexCache);
break;
default:
break;
}
vh.Clear();
vh.AddUIVertexTriangleStream(m_VertexList);
m_VertexCache.Clear();
m_VertexList.Clear();
}
void ApplyGradient_TopToBottom(List<UIVertex> vertexCache)
{
if (vertexCache.Count == 0)
{
return;
}
if (m_ColorArray.Length < 2)
{
return;
}
int vertexCountP
Unity UI/字体颜色渐变效果实现
最新推荐文章于 2024-09-08 22:57:57 发布