Unity的学习笔记(UGUI文本逐个字输出)

之前在网上找过各种的逐个输出字,我可能理解能力不好,照着代码复制没有能使用成功,于是自己研究了很多网上说的思路,各种改良出了一个能用的,写完自己测试,觉得还真好用,于是记录下来

用法:将用代码组件挂上去,通过查找到代码组件,通过enabled来控制组件开关,每次更新文字时候,让组件进行一次关闭和开启,就能再次逐个显示

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class WordOutPut : MonoBehaviour
{

    public float charsPerSecond = 0.05f;//打字时间间隔
    private string words;//保存需要显示的文字

    private bool isActive = false; //判断是否开始输出
    private float timer;//计时器
    private Text myText;//获取身上的test脚本
    private int currentPos = 0;//当前打字位置

    // Use this for initialization
    private void OnDisable()
    {
        OnFinish();//当脚本在失活的时候,将数据进行重置
    }
  /// <summary> 
  /// 当脚本被激活的时候,将数据进行初始化
  /// </summary>
private void OnEnable() { timer = 0; isActive = true; charsPerSecond = Mathf.Max(0.02f, charsPerSecond); //将最小的出字速度限制为0.02,也可以自行调整 myText = GetComponent<Text>(); words = myText.text; myText.text = "";//获取Text的文本信息,保存到words中,然后动态更新文本显示内容,实现打字机的效果 } void Start() { } // Update is called once per frame void Update() { OnStartWriter(); //Debug.Log (isActive); } /// <summary> /// 执行打字任务 /// </summary> void OnStartWriter() { if (isActive) { timer += Time.deltaTime; if (timer >= charsPerSecond)//判断计时器时间是否到达 { timer = 0; currentPos++;
          
         //这里其实还可以做一个改良,可以检测一个input用户输入,如果输入了,则让currentPos = words.Length,这样可以实现按下按键,马上就显示完毕
           myText.text
= words.Substring(0, currentPos);//刷新文本显示内容 if (currentPos >= words.Length) { OnFinish(); } } } } /// <summary> /// 结束打字,初始化数据 /// </summary> void OnFinish() { isActive = false; timer = 0; currentPos = 0; myText.text = words; } }
原文地址:https://www.cnblogs.com/takanashi/p/11026876.html