您的当前位置:首页正文

Unity TMP_Text实现打字机效果

来源:华佗健康网
IEnumerator PlayPrinterEffect(TMPro.TMP_Text textComponent, float speed)
        {
            if (textComponent == null)
            {
                Debug.LogError("Input component is null!!!");
                yield break;
            }
            if (speed <= 0)
            {
                Debug.LogError("Input speed should be larger than 0!!!");
                speed = 1;
            }
            textComponent.ForceMeshUpdate();
            TMPro.TMP_TextInfo textInfo = textComponent.textInfo;

            // 开始播放打印机效果,首先清空所有文字网格
            for (int i = 0; i < textInfo.materialCount; ++i)
            {
                textInfo.meshInfo[i].Clear();
            }
            textComponent.UpdateVertexData(TMPro.TMP_VertexDataUpdateFlags.Vertices);

            float timer = 0;
            float duration = 1 / speed;
            for (int i = 0; i < textInfo.characterCount; ++i)
            {
                while (timer < duration)
                {
                    yield return null;
                    timer += Time.deltaTime;
                }

                timer -= duration;

                TMPro.TMP_CharacterInfo characterInfo = textInfo.characterInfo[i];

                int materialIndex = characterInfo.materialReferenceIndex;
                int verticeIndex = characterInfo.vertexIndex;
                if(characterInfo.elementType == TMPro.TMP_TextElementType.Sprite)
                {
                    verticeIndex = characterInfo.spriteIndex;
                }
                if (characterInfo.isVisible)
                {
                    textInfo.meshInfo[materialIndex].vertices[0 + verticeIndex] = characterInfo.vertex_BL.position;
                    textInfo.meshInfo[materialIndex].vertices[1 + verticeIndex] = characterInfo.vertex_TL.position;
                    textInfo.meshInfo[materialIndex].vertices[2 + verticeIndex] = characterInfo.vertex_TR.position;
                    textInfo.meshInfo[materialIndex].vertices[3 + verticeIndex] = characterInfo.vertex_BR.position;
                    textComponent.UpdateVertexData(TMPro.TMP_VertexDataUpdateFlags.Vertices);
                }
            }
            
        }

因篇幅问题不能全部显示,请点此查看更多更全内容