前言
看见很多游戏有很特殊的波浪形文字效果,于是来尝试一下控制TMP文字顶点的方式达到类似效果。
原理
挂载tmp text,在里面随便放入非空格字符。
tmp text组件开放了textInfo接口,也就是GetComponent<TextMeshProUGUI>().textInfo可以获取text字符串信息:
characterInfo[i].vertexIndex用于找到这个字符起始index;meshInfo[TMP_CharacterInfo.materialReferenceIndex]用于获取mesh信息,再进一层meshInfo.vertices即可拿到顶点信息。
我们就是强行修改vertices信息,然后调用TextMeshProUGUI.UpdateVertexData()即可完成text不同字符间的修改。
保存原始字符顶点vertices信息
//tmp组件
TextMeshProUGUI m_txtSelf = null;
//移动周期
float m_moveTotalTime = 1f;
//上下浮动幅度
float m_amplitude = 100;
Vector3[] m_rawVertex;
public void Awake()
{
m_txtSelf = transform.GetComponent<TextMeshProUGUI>();
}
private void GetRawVertex()
{
m_txtSelf.ForceMeshUpdate();
if (m_txtSelf.textInfo.characterCount > 0)
{
TMP_CharacterInfo charInfo = m_txtSelf.textInfo.characterInfo[0];
TMP_MeshInfo meshInfo = m_txtSelf.textInfo.meshInfo[charInfo.materialReferenceIndex];
//创建对象来保存初始值
m_