12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System;
- using UnityEngine;
- using System.Collections;
- using System.Text;
- using UnityEngine.UI;
- public class Typewriter : MonoBehaviour
- {
- /// <summary>
- /// 打字速度
- /// </summary>
- public float TypeSpeed = 0.2f;
- public Text Showtext;
- /// <summary>
- /// 文本内容字符串
- /// </summary>
- public string StringContent = "";
- /// <summary>
- /// 当前文字位置(当前的最后一个字)
- /// </summary>
- private int curPos;
- public bool IsOver;
- void Awake()
- {
- Showtext = this.GetComponent<Text>();
- IsOver = true;
- }
- private void Start()
- {
- }
- [ContextMenu("SetContent")]
- /// <summary>
- /// 设置内容
- /// </summary>
- public void SetContent()
- {
- // StringContent = Showtext.text;
- curPos = 0;
- // Debug.Log("文本内容:" + StringContent.Length);
- Showtext.text = string.Empty;
- InvokeRepeating("Typing", 0, TypeSpeed);
- IsOver = false;
- }
- public void Pause()
- {
- CancelInvoke("Typing");
- }
- void Typing()
- {
- if (StringContent.Length - 1 == curPos) //如果当前字符位置等于字符总长度前一个位置就停止调用打字方法
- {
- CancelInvoke("Typing");
- IsOver = true;
- }
- // ASCIIEncoding ascii = new ASCIIEncoding();
- //
- // int tempLen = 0;
- //
- // byte[] s = ascii.GetBytes(StringContent.Substring(curPos, 1));
- //
- // for (int i = 0; i < s.Length; i++)
- // {
- // if (s[i] == 63)
- // {
- // tempLen += 2;
- // }
- // else
- // {
- // tempLen += 1;
- // }
- // }
- //
- // if (tempLen == 2)
- // {
- // curPos++;
- // return;
- // }
- if (curPos < StringContent.Length)
- {
- Showtext.text += StringContent.Substring(curPos, 1); //每次都截取到当前位置的下一个字符位置
- curPos++;
- }
- }
- }
|