123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using UnityEngine;
- using System.Collections;
- namespace TMPro.Examples
- {
- public class TextConsoleSimulator : MonoBehaviour
- {
- private TMP_Text m_TextComponent;
- private bool hasTextChanged;
- void Awake()
- {
- m_TextComponent = gameObject.GetComponent<TMP_Text>();
- }
- void Start()
- {
- StartCoroutine(RevealCharacters(m_TextComponent));
- //StartCoroutine(RevealWords(m_TextComponent));
- }
- void OnEnable()
- {
- // Subscribe to event fired when text object has been regenerated.
- TMPro_EventManager.TEXT_CHANGED_EVENT.Add(ON_TEXT_CHANGED);
- }
- void OnDisable()
- {
- TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(ON_TEXT_CHANGED);
- }
- // Event received when the text object has changed.
- void ON_TEXT_CHANGED(Object obj)
- {
- hasTextChanged = true;
- }
- /// <summary>
- /// Method revealing the text one character at a time.
- /// </summary>
- /// <returns></returns>
- IEnumerator RevealCharacters(TMP_Text textComponent)
- {
- textComponent.ForceMeshUpdate();
- TMP_TextInfo textInfo = textComponent.textInfo;
- int totalVisibleCharacters = textInfo.characterCount; // Get # of Visible Character in text object
- int visibleCount = 0;
- while (true)
- {
- if (hasTextChanged)
- {
- totalVisibleCharacters = textInfo.characterCount; // Update visible character count.
- hasTextChanged = false;
- }
- if (visibleCount > totalVisibleCharacters)
- {
- yield return new WaitForSeconds(1.0f);
- visibleCount = 0;
- }
- textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display?
- visibleCount += 1;
- yield return null;
- }
- }
- /// <summary>
- /// Method revealing the text one word at a time.
- /// </summary>
- /// <returns></returns>
- IEnumerator RevealWords(TMP_Text textComponent)
- {
- textComponent.ForceMeshUpdate();
- int totalWordCount = textComponent.textInfo.wordCount;
- int totalVisibleCharacters = textComponent.textInfo.characterCount; // Get # of Visible Character in text object
- int counter = 0;
- int currentWord = 0;
- int visibleCount = 0;
- while (true)
- {
- currentWord = counter % (totalWordCount + 1);
- // Get last character index for the current word.
- if (currentWord == 0) // Display no words.
- visibleCount = 0;
- else if (currentWord < totalWordCount) // Display all other words with the exception of the last one.
- visibleCount = textComponent.textInfo.wordInfo[currentWord - 1].lastCharacterIndex + 1;
- else if (currentWord == totalWordCount) // Display last word and all remaining characters.
- visibleCount = totalVisibleCharacters;
- textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display?
- // Once the last character has been revealed, wait 1.0 second and start over.
- if (visibleCount >= totalVisibleCharacters)
- {
- yield return new WaitForSeconds(1.0f);
- }
- counter += 1;
- yield return new WaitForSeconds(0.1f);
- }
- }
- }
- }
|