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 }
时间: 2024-11-05 18:46:44