You can not 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
121 lines
3.7 KiB
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); |
|
} |
|
} |
|
|
|
} |
|
} |