Typewriter.cs 2.1 KB

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