创新项目实训实践笔记-19

物品展示部分

7-文字简介再升级版

效果想象

经常看的许多综艺节目中经常有这样的镜头,当节目需要用文字介绍某一个物品或时间时,往往不是使用简单的文字的罗列,这样会让人看的很乱,容易看着看着就忘记自己读到那了,因此很多节目选自了使用一个类似于打字的方式使得文字逐字显示而非一下子全部显示,提升了用户的观感和软件质量

代码实现

首先我们声明一些变量,比如计时器、TestMesh对象、需要显示的文字、当前的文字位置等

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

    private bool isActive = false;
    private float timer;//计时器
    private TextMesh myText;
    private int currentPos = 0;//当前打字位置

然后我们在Start方法中为相关的变量初始化

		timer = 0;
        isActive = true;
        charsPerSecond = Mathf.Max(0.2f, charsPerSecond);
        myText = GetComponent<TextMesh>();
        words = myText.text;
        myText.text = "";//获取Text的文本信息,保存到words中,然后动态更新文本显示内容,实现打字机的效果

接着我们写一个方法,当该物体被激活时开始计时,根据设定的文字显示速度计算,每当一个文字到了 其该显示的时间时,就将其和前面所有的文字截取下来,进行显示,直至所有文字显示完毕

    void OnStartWriter()
    {

        if (isActive)
        {
            timer += Time.deltaTime;
            if (timer >= charsPerSecond)
            {//判断计时器时间是否到达
                timer = 0;
                currentPos++;
                myText.text = words.Substring(0, currentPos);//刷新文本显示内容

                if (currentPos >= words.Length)
                {
                    OnFinish();
                }
            }

        }
    }

显示结束方法

    void OnFinish()
    {
        isActive = false;
        timer = 0;
        currentPos = 0;
        myText.text = words;
    }

脚本整体为:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TypewriterEffect : MonoBehaviour
{
    public float charsPerSecond = 0.2f;//打字时间间隔
    private string words;//保存需要显示的文字

    private bool isActive = false;
    private float timer;//计时器
    private TextMesh myText;
    private int currentPos = 0;//当前打字位置

    // Start is called before the first frame update
    void Start()
    {
        timer = 0;
        isActive = true;
        charsPerSecond = Mathf.Max(0.2f, charsPerSecond);
        myText = GetComponent<TextMesh>();
        words = myText.text;
        myText.text = "";//获取Text的文本信息,保存到words中,然后动态更新文本显示内容,实现打字机的效果
    }

    // Update is called once per frame
    void Update()
    {
        OnStartWriter();
    }
    /// <summary>
    /// 执行打字任务
    /// </summary>
    void OnStartWriter()
    {

        if (isActive)
        {
            timer += Time.deltaTime;
            if (timer >= charsPerSecond)
            {//判断计时器时间是否到达
                timer = 0;
                currentPos++;
                myText.text = words.Substring(0, currentPos);//刷新文本显示内容

                if (currentPos >= words.Length)
                {
                    OnFinish();
                }
            }

        }
    }
    /// <summary>
    /// 结束打字,初始化数据
    /// </summary>
    void OnFinish()
    {
        isActive = false;
        timer = 0;
        currentPos = 0;
        myText.text = words;
    }
}
©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值