You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:24:05