Unity UGUI模擬打字效果
阿新 • • 發佈:2019-02-05
程式碼如下
using System.Collections; using UnityEngine; using UnityEngine.UI; public class SelfWritingText : MonoBehaviour { [SerializeField] private Text textToUse; [SerializeField] private bool useThisText = false; [SerializeField] private bool useThisTextText = false; [SerializeField] private float letterPause = 0.1f; [TextAreaAttribute(4, 15)] [SerializeField] private string message; private void Start() { message = textToShow[0]; if (useThisText) { textToUse = GetComponent<Text>(); } if (useThisTextText) { message = textToUse.text; } textToUse.text = ""; StartCoroutine(TypeText(textToUse, message, letterPause)); } private IEnumerator TypeText(Text text, string textText, float timePause) { for (int i = 0; i < textText.Length; i++) { text.text += textText[i]; yield return 0; yield return new WaitForSeconds(timePause); } } public void WriteText(Text newText = null, string newTextToShow = null, float newLetterPause = -1.0f) { if (newText != null && newTextToShow != null && newLetterPause > 0.0f) { StartCoroutine(TypeText(newText, newTextToShow, newLetterPause)); return; } if (newText != null && newTextToShow != null) { StartCoroutine(TypeText(newText, newTextToShow, letterPause)); return; } if (newText != null && newLetterPause > 0.0f) { StartCoroutine(TypeText(newText, message, newLetterPause)); return; } if (newTextToShow != null && newLetterPause > 0.0f) { StartCoroutine(TypeText(textToUse, newTextToShow, newLetterPause)); return; } if (newTextToShow != null) { StartCoroutine(TypeText(textToUse, newTextToShow, letterPause)); return; } if (newLetterPause > 0.0f) { StartCoroutine(TypeText(textToUse, message, letterPause)); return; } } }