mirror of
				https://github.com/DerTyp7/defrain-shooter-unity.git
				synced 2025-10-31 21:47:07 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|     }
 | |
| } | 
