unity实现打字效果(例如游戏中的NPC对话面板)


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

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM