/// Credit Breyer /// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407 using UnityEngine; using System.Collections; using UnityEngine.UI; using System; [RequireComponent(typeof(Text),typeof(RectTransform))] public class CurvedText : BaseVertexEffect { public AnimationCurve curveForText = AnimationCurve.Linear (0, 0, 1, 10); public float curveMultiplier = 1; private RectTransform rectTrans; #if UNITY_EDITOR protected override void OnValidate () { base.OnValidate (); if (curveForText [0].time != 0) { var tmpRect = curveForText [0]; tmpRect.time = 0; curveForText.MoveKey (0, tmpRect); } if (rectTrans == null) rectTrans = GetComponent (); if (curveForText [curveForText.length - 1].time != rectTrans.rect.width) OnRectTransformDimensionsChange (); } #endif protected override void Awake () { base.Awake (); rectTrans = GetComponent (); OnRectTransformDimensionsChange (); } protected override void OnEnable () { base.OnEnable (); rectTrans = GetComponent (); OnRectTransformDimensionsChange (); } public override void ModifyVertices (System.Collections.Generic.List verts) { if (!IsActive ()) return; for (int index = 0; index < verts.Count; index++) { var uiVertex = verts [index]; //Debug.Log (); uiVertex.position.y += curveForText.Evaluate (rectTrans.rect.width * rectTrans.pivot.x + uiVertex.position.x) * curveMultiplier; verts [index] = uiVertex; } } protected override void OnRectTransformDimensionsChange () { var tmpRect = curveForText [curveForText.length - 1]; tmpRect.time = rectTrans.rect.width; curveForText.MoveKey (curveForText.length - 1, tmpRect); } }