using System;
using System.Collections.Generic;
namespace UnityEngine.UI.Extensions
{
/// <summary>
/// Curved text.让文本按照曲线进行显示 【注意对Image的变形 也是可以的】
/// 说明: 对Text的操作就和 shadow 和 outline 组件类似。
/// </summary>
// [RequireComponent(typeof(Text), typeof(RectTransform))]
[AddComponentMenu("UI/Effects/Extensions/Curved Text")]
public class CurvedText : BaseMeshEffect
{
// 曲线类型
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();
}
/// <summary>
/// Modifies the mesh. 最重要的重载函数
/// </summary>
/// <param name="mesh">Mesh.</param>
public override void ModifyMesh(VertexHelper vh)
{
if (!IsActive())
return;
// 从mesh 得到 顶点集
List<UIVertex> verts = new List<UIVertex>();
vh.GetUIVertexStream(verts);
// 顶点的 y值按曲线变换
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;
}
// 在合成mesh
vh.AddUIVertexTriangleStream(verts);
}
protected override void OnRectTransformDimensionsChange()
{
var tmpRect = curveForText[curveForText.length - 1];
if (rectTrans != null)
{
tmpRect.time = rectTrans.rect.width;
curveForText.MoveKey(curveForText.length - 1, tmpRect);
}
}
}
}
unity3d曲线text文本
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 版本记录 前言 Core Text框架主要用来做文字处理,是的iOS3.2+和OSX10.5+中的文本引擎,让您精...