You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			121 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								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);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |