Unity は UGUI にタイピング効果を提供します

コードに直接移動します。

/**********************************************************************
 文件信息
 文件名(File Name):                UIHint.cs
 作者(Author):                      
 创建时间(CreateTime):             #CREATETIME#
 Unity版本(UnityVersion):         #UNITYVERSION#
 项目:
 **********************************************************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;

namespace Twq
{
    /// <summary>
    /// 打字效果提示
    /// </summary>
    public class UIHint : MonoBehaviour
    {
        public static UIHint Instance;
        public GameObject Mask;
        public Text myText;//描述内容
        public Button confirmBtn;//确定
       
        public float charsPerSecond = 0.2f;//打字时间间隔
        private string words;//保存需要显示的文字

        private bool isActive = false;
        private float timer;//计时器
      
        private int currentPos = 0;//当前打字位置
        void Awake()
        {
            Instance = this;
            confirmBtn.onClick.AddListener(() => {
                SetState(false, "");
            });
        }

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

        /// <summary>
        /// 设置状态
        /// </summary>
        /// <param name="bo"></param>
        /// <param name="description">内容</param>
        public void SetState(bool bo,string description="",Action action_=null)
        {
            isActive = false;
            currentPos = 0;
            words = "";
            timer = 0;
            charsPerSecond = Mathf.Max(0.2f, charsPerSecond);
            myText.text = description;//获取Text的文本信息,保存到words中,然后动态更新文本显示内容,实现打字机的效果
            words = myText.text;
            isActive = bo;
            Mask.SetActive(bo);
        }
    }
}



おすすめ

転載: blog.csdn.net/qq_37524903/article/details/132491335