1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using System;
- using UnityEngine;
- using UnityEngine.UI;
- using System.Collections.Generic;
- namespace GameStartStudio
- {
- public enum GradientDirection
- {
- Vertical,
- Horizontal,
- LeftUpToRightDown,
- LeftDownToRightUp
- }
- [RequireComponent(typeof(Text))]
- public class TextGradient : BaseMeshEffect
- {
- // 每个字符默认的顶点数量
- private const int DefaultVertexNumPerFont = 6;
- public Color32 startColor = Color.white;
- public Color32 endColor = Color.black;
- public GradientDirection direction;
- private readonly List<UIVertex> _vertexBuffers = new List<UIVertex> ();
- // 给顶点着色
- private static void ModifyVertexColor(IList<UIVertex> vertexList, int index, Color color)
- {
- UIVertex uiVertex = vertexList[index];
- uiVertex.color = color;
- vertexList[index] = uiVertex;
- }
- public override void ModifyMesh(VertexHelper vh)
- {
- if (!IsActive())
- {
- return;
- }
- vh.GetUIVertexStream(_vertexBuffers);
- Debug.Log(_vertexBuffers.Count);
- int count = _vertexBuffers.Count;
- if (count > 0)
- {
- for (int i = 0; i < count; i += DefaultVertexNumPerFont)
- {
- switch (direction)
- {
- case GradientDirection.Vertical:
- ModifyVertexColor(_vertexBuffers, i, startColor);
- ModifyVertexColor(_vertexBuffers, i + 1, startColor);
- ModifyVertexColor(_vertexBuffers, i + 2, endColor);
- ModifyVertexColor(_vertexBuffers, i + 3, endColor);
- ModifyVertexColor(_vertexBuffers, i + 4, endColor);
- ModifyVertexColor(_vertexBuffers, i + 5, startColor);
- break;
- case GradientDirection.Horizontal:
- ModifyVertexColor(_vertexBuffers, i, startColor);
- ModifyVertexColor(_vertexBuffers, i + 1, endColor);
- ModifyVertexColor(_vertexBuffers, i + 2, endColor);
- ModifyVertexColor(_vertexBuffers, i + 3, endColor);
- ModifyVertexColor(_vertexBuffers, i + 4, startColor);
- ModifyVertexColor(_vertexBuffers, i + 5, startColor);
- break;
- case GradientDirection.LeftUpToRightDown:
- ModifyVertexColor(_vertexBuffers, i, startColor);
- ModifyVertexColor(_vertexBuffers, i + 1, endColor);
- ModifyVertexColor(_vertexBuffers, i + 2, startColor);
- ModifyVertexColor(_vertexBuffers, i + 3, startColor);
- ModifyVertexColor(_vertexBuffers, i + 4, endColor);
- ModifyVertexColor(_vertexBuffers, i + 5, startColor);
- break;
- case GradientDirection.LeftDownToRightUp:
- ModifyVertexColor(_vertexBuffers, i, endColor);
- ModifyVertexColor(_vertexBuffers, i + 1, startColor);
- ModifyVertexColor(_vertexBuffers, i + 2, endColor);
- ModifyVertexColor(_vertexBuffers, i + 3, endColor);
- ModifyVertexColor(_vertexBuffers, i + 4, startColor);
- ModifyVertexColor(_vertexBuffers, i + 5, endColor);
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- }
- }
- vh.Clear();
- vh.AddUIVertexTriangleStream(_vertexBuffers);
- }
- }
- }
|