打字机效果
闲来无事,更新小技巧点,本问主要是实现将Text文本逐字打印的效果,写作部分来源尘世喧嚣的博客,并进行了优化。
打字机的效果主要实现方式是利用Substring函数,简单介绍一下Substring。
substring是用来截取字符串的,根据参数的个数不同,方法含义也不同:
(1)substring(0,2)这个只含开头不含结尾,因此截取是截取两个字符,从第一个到第二个字符,不包含第三个。例如字符串“123456789”,使用了substring(0,2)就会截取“12”。
(2)substring(2)这个表示截掉前两个,得到后边的新字符串。例如字符串“123456789”,使用了substring(2)就会截取“3456789”。
下面是具体实现代码,只要将下列脚本挂载到你想要实现打字机效果的Text上就行了
using UnityEngine;
using UnityEngine.UI;
public class Typewriter : MonoBehaviour {
public float PerSecond = 0.2f;//打字机打字时间间隔
private string m_words;//保存Text中需要显示的文字
private bool isActive = false;
private float m_timer;//计时器
private Text m_Text; //显示文本的Text组件
private int m_count = 0;//当前打字位置
void Start()
{
Init();
}
/// <summary>
/// 初始化参数
/// </summary>
private void Init()
{
m_timer = 0;
isActive = true;
PerSecond = Mathf.Max(0.2f, PerSecond); //确保打字最小间隔时间为0.2秒
m_Text = GetComponent<Text>();
m_words = m_Text.text;
m_Text.text = "";
}
void Update()
{
if (isActive)
{
StartWriter();
}
}
/// <summary>
/// 重复查看打字机效果的方法
/// </summary>
public void StartEffect()
{
isActive = true;
}
/// <summary>
/// 执行打字任务
/// </summary>
void StartWriter()
{
if (m_timer+ Time.deltaTime >= PerSecond)
{
//计时
m_timer = 0;
m_count++;
m_Text.text = m_words.Substring(0, m_count);//刷新文本显示内容
if (m_count >= m_words.Length)
{
OverWriter();
}
}
}
/// <summary>
/// 结束打字,初始化数据
/// </summary>
void OverWriter()
{
isActive = false;
m_timer = 0;
m_count = 0;
m_Text.text = m_words;
}
}