对话流程故障排查
诊断对话状态卡在 Idle、时序感觉不对,以及多角色场景中的对话流程驱动冲突。
当角色的对话状态从不变化、变化速度不对,或者多角色场景中一个角色对另一个角色的对话作出反应时,请使用此页面。先进入 Play 模式并展开 Live 在 ConvaiConversationFlowController 该组件——下面的大多数症状都可以直接在那里看到。
故障排查表
State 保持 空闲 中找到它,位于 Live 部分,即使角色正在说话时也是如此
角色的就绪信号从未到达—— ConvaiCharacter 尚未完成连接,或者与其相关的事件没有到达此控制器
在你预期出现具身化行为之前,请确认角色已完成连接。如果 ConvaiConversationFlowController 放在不同的 GameObject 而不是 ConvaiCharacter 它应追踪的对象之下,请把它移到同一层级下
State 会从 空闲 在角色连接并且对话开始后
角色停留在 思考, 关注中,或 平复 比预期长得多或短得多
分配的 ConvaiConversationFlowProfile 设置的保持时间比预期更长或更短,或者未分配配置文件,而内置默认值与您想要的节奏不符
打开已分配的配置文件(或分配一个)并检查其 对话节拍 字段是否与 对话流程参考
状态停留时间 中找到它,位于 Live 部分在超过该状态的调好时长后就不再推进
某个 ConvaiConversationFlowController 出现在了你从未将其添加到的角色上
Convai 自动为其配置了它,因为另一个模块——目前是 Body Animation,且 自动创建 Conversation Flow 已启用——需要一个对话状态,而当时并不存在
无需修复——这是预期行为。像配置其他控制器一样配置自动添加的控制器,或者禁用 自动创建 Conversation Flow Body Animation 组件上的该选项,如果你想自己添加控制器
Console 仅记录过一次下面引号中的消息,并注明了角色名称
在多角色场景中,一个角色的对话状态会对另一角色的玩家语音作出反应
多于一个 ConvaiConversationFlowController 同时处于活动状态;一旦检测到其他活动驱动器,每个驱动器都会将作用域限定到自己的角色,但没有作用域化对话目标的场景可能会短暂共享未限定作用域的信号
为每个角色的对话流程驱动器指定一个带作用域的对话目标,而不要依赖未限定作用域的玩家语音和转写事件
下面引号中的 Console 警告将不再出现,并且每个角色的 State 状态只会在其自己的轮次中变化
状态从未离开 Idle
状态机的第一条规则是无条件的:只要角色尚未就绪,读取值就保持为 空闲 ,无论任何其他信号如何。“Ready”在这里指角色已经连接且 Convai 已确认连接,而不仅仅是 GameObject 在场景中处于激活状态。
如果角色确实变得就绪,但 State 仍然没有变化,请确认 ConvaiConversationFlowController 位于同一 GameObject 层级中,与 ConvaiCharacter 它本应追踪的对象——对错误角色解析出来的控制器永远看不到该角色的语音和转写事件。
时序感觉不对
状态机使用的每个保持时间、宽限期和延迟都来自所分配的 ConvaiConversationFlowProfile ——或者,如果未分配,则来自 对话流程参考中显示为默认值的相同数值。如果角色回复太慢,请降低 思考最长保持时间;如果它在暂停时回落到 空闲 得太快,请提高 空闲返回延迟。观察 状态停留时间 中找到它,位于 Live 部分,在你调整某个值时即可立即在 Play 模式中看到效果,无需编写任何脚本。
有一对字段会自我修正,而不会悄悄出错:如果 思考最短保持时间 设置高于 思考最长保持时间,配置文件会提高 思考最长保持时间 以匹配你在 Inspector 中编辑它的那一刻,因此这两个字段永远不会与角色实际表现不一致。
对话流程在未添加的情况下出现了
Convai 会添加 ConvaiConversationFlowController 当角色上的某个模块需要对话状态而该状态尚不存在时,会自动添加。目前只有 Body Animation 会通过其 自动创建 Conversation Flow 设置(默认启用)来这样做。Console 会记录一次,并标明角色名称:
这不是错误。自动添加的控制器的行为与你自己添加的一样——请参见 配置对话流程 ,为其分配一个配置文件。
多角色场景中的重复驱动器
ConvaiConversationFlowController 不允许同一 GameObject,但场景仍可同时运行多个控制器——每个角色一个。当有多个 倾听 状态不会泄露到另一个角色。只要控制器还没有带作用域的对话目标,它就会记录警告,而不是静默忽略错误的信号:
为每个角色提供一个带作用域的对话目标,这样其驱动器就只会对该角色自己的轮次作出反应。
下一步
配置对话流程对话流程参考具身化故障排查最后更新于
这有帮助吗?