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

Unity游戏快速切换不同对象对话时出现乱码字符问题求助

问题根因

快速触发不同对象的对话时,上一轮对话尚未执行完成的打字协程没有被终止,多个协程同时向对话文本组件追加字符,最终导致文本内容混乱。你当前代码中仅在DisplayNextSentence方法内调用了StopAllCoroutines(),但触发新对话时走的是StartDialogue入口,没有终止旧协程的逻辑。

修复方案

修改DialogueManager类的StartDialogue方法,在方法开头先终止所有运行中的协程,同时提前清空对话文本,避免旧内容残留:

public void StartDialogue(Dialogue dialogue){
    // 终止所有旧协程,避免多个打字逻辑同时运行
    StopAllCoroutines();
    // 提前清空对话文本,清除上一轮对话的残留内容
    dialogueText.text = "";

    playerController.enabled = false;
    nameText.text = dialogue.name;

    sentences.Clear();

    foreach(string sentence in dialogue.sentences){
        sentences.Enqueue(sentence);
    }

    DisplayNextSentence();
}
可选优化建议
  • 新增对话状态标志位,避免极短时间内重复触发对话逻辑:在DialogueManager中定义私有变量private bool isDialogueActive,StartDialogue开头先判断如果isDialogueActive为true就直接返回,在StartDialogue执行时将其设为true,EndDialogue执行时设为false。
  • 将你的公共变量gameObject重命名为dialoguePanel,该名称和Unity内置的游戏对象属性重名,容易引发不可预期的逻辑错误。
  • 可以将打字延迟参数调整为更小的值(比如0.05f),默认0.5f打字速度过慢,也会增加快速切换时的冲突概率。

内容的提问来源于stack exchange,提问作者Nemo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:18:01