using UnityEngine; using TMPro; public class DynamicTMP : MonoBehaviour { public TMP_Text tmp; public float Strength = 3.6f; public float Space = 0.03f; public float Frequently = 2f; void Update() { tmp.ForceMeshUpdate(); var textInfo = tmp.textInfo; for (int i = 0; i < textInfo.characterCount; i++) { var charInfo = textInfo.characterInfo[i]; if(!charInfo.isVisible) continue; var verts = textInfo.meshInfo[charInfo.materialReferenceIndex].vertices; for (int j = 0; j < 4; j++) { var orig = verts[charInfo.vertexIndex + j]; verts[charInfo.vertexIndex + j] = orig + new Vector3(0, Mathf.Sin(Time.time * Frequently + orig.x * Space) * Strength, 0); } } for (int i = 0; i < textInfo.meshInfo.Length; i++) { var meshInfo = textInfo.meshInfo[i]; meshInfo.mesh.vertices = meshInfo.vertices; tmp.UpdateGeometry(meshInfo.mesh, i); } } }