using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; public class UITextShow : MonoBehaviour { private TMPro.TextMeshProUGUI _text; private void Awake() { _text = GetComponent(); } public void SetText(string text) { _text.SetText(text); } public void ShowSubtitle(string text, float delay, float afterDelay, Action onStart, Action onEnd) { StartCoroutine(Subtitle_Coroutine(text, delay, afterDelay, onStart, onEnd)); } public void ShowTimer(int time, string afterTimerText, float afterDelay, Action onStart, Action onEnd) { StartCoroutine(Timer_Coroutine(time, afterTimerText, afterDelay, onStart, onEnd)); } private IEnumerator Timer_Coroutine(int time, string afterTimerText, float afterDelay, Action onStart, Action onEnd) { onStart?.Invoke(); for (int i = time; i > 0; i--) { _text.SetText(i.ToString()); yield return new WaitForSeconds(1); } _text.SetText(afterTimerText); yield return new WaitForSeconds(afterDelay); _text.SetText(string.Empty); onEnd?.Invoke(); } private IEnumerator Subtitle_Coroutine(string text, float delay, float afterDelay, Action onStart, Action onEnd) { onStart?.Invoke(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < text.Length; i++) { sb.Append(text[i]); _text.SetText(sb); yield return new WaitForSeconds(delay); } yield return new WaitForSeconds(afterDelay); _text.SetText(string.Empty); onEnd?.Invoke(); } }