Typewriter.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using UnityEngine;
  3. using System.Collections;
  4. using System.Text;
  5. using UnityEngine.UI;
  6. public class Typewriter : MonoBehaviour
  7. {
  8. /// <summary>
  9. /// 打字速度
  10. /// </summary>
  11. public float TypeSpeed = 0.2f;
  12. public Text Showtext;
  13. /// <summary>
  14. /// 文本内容字符串
  15. /// </summary>
  16. public string StringContent = "";
  17. /// <summary>
  18. /// 当前文字位置(当前的最后一个字)
  19. /// </summary>
  20. private int curPos;
  21. public bool IsOver;
  22. void Awake()
  23. {
  24. Showtext = this.GetComponent<Text>();
  25. IsOver = true;
  26. }
  27. private void Start()
  28. {
  29. }
  30. [ContextMenu("SetContent")]
  31. /// <summary>
  32. /// 设置内容
  33. /// </summary>
  34. public void SetContent()
  35. {
  36. // StringContent = Showtext.text;
  37. curPos = 0;
  38. // Debug.Log("文本内容:" + StringContent.Length);
  39. Showtext.text = string.Empty;
  40. InvokeRepeating("Typing", 0, TypeSpeed);
  41. IsOver = false;
  42. }
  43. public void Pause()
  44. {
  45. CancelInvoke("Typing");
  46. }
  47. void Typing()
  48. {
  49. if (StringContent.Length - 1 == curPos) //如果当前字符位置等于字符总长度前一个位置就停止调用打字方法
  50. {
  51. CancelInvoke("Typing");
  52. IsOver = true;
  53. }
  54. // ASCIIEncoding ascii = new ASCIIEncoding();
  55. //
  56. // int tempLen = 0;
  57. //
  58. // byte[] s = ascii.GetBytes(StringContent.Substring(curPos, 1));
  59. //
  60. // for (int i = 0; i < s.Length; i++)
  61. // {
  62. // if (s[i] == 63)
  63. // {
  64. // tempLen += 2;
  65. // }
  66. // else
  67. // {
  68. // tempLen += 1;
  69. // }
  70. // }
  71. //
  72. // if (tempLen == 2)
  73. // {
  74. // curPos++;
  75. // return;
  76. // }
  77. if (curPos < StringContent.Length)
  78. {
  79. Showtext.text += StringContent.Substring(curPos, 1); //每次都截取到当前位置的下一个字符位置
  80. curPos++;
  81. }
  82. }
  83. }