1. 程式人生 > >Unity UGUI模擬打字效果

Unity UGUI模擬打字效果

程式碼如下

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;
        }
    }
}