1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4 using UnityEngine.UI;
5
6 [AddComponentMenu("UI/Effects/GradientText")]
7 public class GradientText : BaseMeshEffect
8 {
9 [SerializeField]
10 private Color32 topColor = Color.white;
11
12 [SerializeField]
13 private Color32 bottomColor = Color.black;
14
15 public override void ModifyMesh(VertexHelper vh)
16 {
17 if (!IsActive() || vh.currentVertCount == 0)
18 return;
19 List<UIVertex> vertices = new List<UIVertex>();
20 vh.GetUIVertexStream(vertices);
21 float bottomY = vertices[0].position.y;
22 float topY = vertices[0].position.y;
23 for (int i = 1; i < vertices.Count; i++ )
24 {
25 if( vertices[i].position.y > topY) {
26 topY = vertices[i].position.y;
27 }
28 else if (vertices[i].position.y < bottomY)
29 {
30 bottomY = vertices[i].position.y;
31 }
32 }
33 float uiElementHeight = topY- bottomY;
34 UIVertex v = new UIVertex();
35 for (int i = 0; i<vh.currentVertCount; i++)
36 {
37 vh.PopulateUIVertex(ref v, i);
38 v.color = Color32.Lerp(bottomColor, topColor, (v.position.y - bottomY) / uiElementHeight);
39 vh.SetUIVertex(v, i);
40 }
41 }
42 }
![]()