Tanoda
CurvedText.cs
Go to the documentation of this file.
1
3
5{
6 [RequireComponent(typeof(Text), typeof(RectTransform))]
7 [AddComponentMenu("UI/Effects/Extensions/Curved Text")]
8 public class CurvedText : BaseMeshEffect
9 {
10 [SerializeField]
11 private AnimationCurve _curveForText = AnimationCurve.Linear(0, 0, 1, 10);
12
13 public AnimationCurve CurveForText
14 {
15 get { return _curveForText; }
16 set { _curveForText = value; graphic.SetVerticesDirty(); }
17 }
18
19 [SerializeField]
20 private float _curveMultiplier = 1;
21
22 public float CurveMultiplier
23 {
24 get { return _curveMultiplier; }
25 set { _curveMultiplier = value; graphic.SetVerticesDirty(); }
26 }
27
28 private RectTransform rectTrans;
29
30
31#if UNITY_EDITOR
32 protected override void OnValidate()
33 {
34 base.OnValidate();
35 if (_curveForText[0].time != 0)
36 {
37 var tmpRect = _curveForText[0];
38 tmpRect.time = 0;
39 _curveForText.MoveKey(0, tmpRect);
40 }
41 if (rectTrans == null)
42 rectTrans = GetComponent<RectTransform>();
43 if (_curveForText[_curveForText.length - 1].time != rectTrans.rect.width)
45 }
46#endif
47 protected override void Awake()
48 {
49 base.Awake();
50 rectTrans = GetComponent<RectTransform>();
52 }
53 protected override void OnEnable()
54 {
55 base.OnEnable();
56 rectTrans = GetComponent<RectTransform>();
58 }
59 public override void ModifyMesh(VertexHelper vh)
60 {
61 int count = vh.currentVertCount;
62 if (!IsActive() || count == 0)
63 {
64 return;
65 }
66 for (int index = 0; index < vh.currentVertCount; index++)
67 {
68 UIVertex uiVertex = new UIVertex();
69 vh.PopulateUIVertex(ref uiVertex, index);
70 uiVertex.position.y += _curveForText.Evaluate(rectTrans.rect.width * rectTrans.pivot.x + uiVertex.position.x) * _curveMultiplier;
71 vh.SetUIVertex(uiVertex, index);
72 }
73 }
74 protected override void OnRectTransformDimensionsChange()
75 {
76 if (rectTrans)
77 {
78 Keyframe tmpRect = _curveForText[_curveForText.length - 1];
79 tmpRect.time = rectTrans.rect.width;
80 _curveForText.MoveKey(_curveForText.length - 1, tmpRect);
81 }
82 }
83 }
84}
override void ModifyMesh(VertexHelper vh)
Definition: CurvedText.cs:59
override void OnRectTransformDimensionsChange()
Definition: CurvedText.cs:74
Credit Erdener Gonenc - @PixelEnvision.