コードに直接移動します。
/**********************************************************************
文件信息
文件名(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);
}
}
}