using System; using UnityEngine; using System.Collections; using System.Text; using Unity.VisualScripting; using UnityEngine.UI; public class Typewriter : MonoBehaviour { /// /// 打字速度 /// public float TypeSpeed = 0.2f; public Text Showtext; /// /// 文本内容字符串 /// public string StringContent = ""; /// /// 当前文字位置(当前的最后一个字) /// private int curPos; public bool IsOver; void Awake() { Showtext = this.GetComponent(); IsOver = true; } private void Start() { } /// /// 设置内容 /// [ContextMenu("SetContent")] public void SetContent() { if (StringContent.Length == 0) { StringContent = Showtext.text; } curPos = 0; 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++; } } }