mirror of
				https://github.com/DerTyp7/fps-citybuild-unity.git
				synced 2025-11-03 22:18:58 +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);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
} |