com.unity.uiextensions/Scripts/CurvedText.cs

63 lines
1.8 KiB
C#

/// 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<RectTransform> ();
if (curveForText [curveForText.length - 1].time != rectTrans.rect.width)
OnRectTransformDimensionsChange ();
}
#endif
protected override void Awake ()
{
base.Awake ();
rectTrans = GetComponent<RectTransform> ();
OnRectTransformDimensionsChange ();
}
protected override void OnEnable ()
{
base.OnEnable ();
rectTrans = GetComponent<RectTransform> ();
OnRectTransformDimensionsChange ();
}
public override void ModifyVertices (System.Collections.Generic.List<UIVertex> 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);
}
}