Unity 打字机文本效果如何实现问号后添加更长停留延迟?
问题核心原因
- 协程
PlayText仅遍历了文本字符,没有执行字符追加到Text组件的逻辑,完全没有实现打字机显示效果 - 问号延迟的触发时序错误,当前逻辑是等下一个字符输出前才触发问号后的延迟,用户感知不到问号的停留效果
ChangeText方法的参数逻辑混淆,你把初始调用延迟、普通字符间隔、问号后特殊延迟三个参数混在了一起
修正后完整代码
using UnityEngine; using System.Collections; using UnityEngine.UI; using System; public class QuestionMarkDelay : MonoBehaviour { [Header("普通字符输出间隔")] public float normalDelay = 0.05f; [Header("问号输出后的额外停留时间")] public float delayAfterQuestion = 1.2f; private string story; public Text text; // 可直接在外部调用的触发打字机方法 // textContent:要显示的完整文本 // startDelay:打字机开始前的等待时间,默认0 public void ChangeText(string textContent, float startDelay = 0f) { StopAllCoroutines(); // 停止所有正在运行的协程,避免冲突 story = textContent; text.text = ""; Invoke(nameof(Start_PlayText), startDelay); } void Start_PlayText() { StartCoroutine(PlayText()); } IEnumerator PlayText() { foreach (char c in story) { // 追加当前字符到文本 text.text += c; // 判断当前字符是不是问号,是就走更长的延迟 if (c == '?') { yield return new WaitForSeconds(delayAfterQuestion); } // 普通字符走默认间隔 else { yield return new WaitForSeconds(normalDelay); } } } }
使用说明
- 在Inspector面板给text字段挂载你要显示的UI Text组件,根据需求调整两个延迟参数即可
- 如果需要适配逗号、句号的特殊延迟,只需要在if判断里追加对应字符的分支逻辑即可
内容的提问来源于stack exchange,提问作者amogusandrdev772
相关产品推荐
相关产品推荐

