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

Unity中C#的TypeDialog协程重复调用时如何中断前次执行?

解决Unity协程重复调用导致文本叠加的问题

问题根源在于多次调用TypeDialog协程时,旧的协程并未停止,多个协程会同时修改UI文本框内容,最终造成字符叠加。核心解决思路是启动新协程前终止正在运行的旧协程,具体实现步骤如下:

  1. 在脚本类中添加一个Coroutine类型的成员变量,用于记录当前正在运行的打字协程实例:
private Coroutine currentTypingCoroutine;
  1. 修改调用TypeDialog的逻辑,每次调用前先停止旧协程,再启动新协程并更新引用:
// 示例调用逻辑(可放在按钮点击、剧情触发等场景中)
if (currentTypingCoroutine != null)
{
    StopCoroutine(currentTypingCoroutine);
}
currentTypingCoroutine = StartCoroutine(TypeDialog("新的对话文本"));
  1. 原TypeDialog函数可保留,建议在协程结束后清空引用,避免后续误判:
public IEnumerator TypeDialog(string dialog)
{
    dialogText.text = "";
    foreach (var letter in dialog.ToCharArray())
    {
        dialogText.text += letter;
        yield return new WaitForSeconds(1f / letterPerSecond);
    }

    yield return new WaitForSeconds(1f);
    // 协程结束后重置引用
    currentTypingCoroutine = null;
}

关键说明

  • 必须通过具体的协程实例调用StopCoroutine来终止,不推荐用字符串形式启动/停止协程(易出错且性能较差)。
  • 协程结束后清空引用,能避免下次调用时错误尝试停止已结束的协程。

内容的提问来源于stack exchange,提问作者C-delb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:30:05