排查情感问题
修复常见的情感问题——表情未显示、状态被意外锁定、Morph Target 不匹配,以及偏移更改没有可见效果。
大多数情绪问题可归为三类:没有 情绪状态更改时 事件根本没有触发、事件触发了但面部没有移动,或者因锁定而状态卡住。首先添加一个 打印字符串 在你的 情绪状态更改时 处理器中——这一个信号可以判断问题是在会话/信号路径中,还是在 Morph Target 应用过程中。
检查实时状态
该 UConvaiChatbotComponent 可在 Play In Editor 期间,从 Blueprint 中随时查询情绪状态,无需额外工具。
事件是否触发
Add 打印字符串 在 情绪状态更改时
如果它从不触发,则会话没有传递情绪数据,或者 锁定情绪状态 正在阻止服务器更新
特定情绪的当前分数
调用 获取情绪分数 并连接到 打印浮点数
高于……的值 0.0 确认情绪处于活动状态
状态是否被锁定
打印 锁定情绪状态 bool 属性
true 表示服务器更新和服务器驱动的事件会被抑制
要在不依赖实时对话的情况下验证 Morph Target 映射,请调用 强制设置情绪 从 BeginPlay、一个临时的 Blueprint 输入或测试事件,或者一个调用……的自定义可在编辑器中调用的包装函数 强制设置情绪。然后检查是否 获取情绪分数 返回预期值,并且你的 设置 Morph Target 节点有响应。
锁定情绪状态 是一个已复制属性。如果你在测试期间将其设置为 true ,请确认它在发布前被重置为 false 再发布之前——锁定状态会在不产生运行时错误的情况下静默抑制所有实时情绪响应。
第一线排查
当情绪表现不符合预期时,按顺序完成这份检查清单。大多数问题在第 1 或第 2 步就能解决。
检查情绪分数
在你的事件处理器中,调用 获取情绪分数 你期望的情绪,并打印返回值。确认:
分数高于
0.0当角色说出带有情绪内容的话时。如果分数一直保持在0.0,情绪偏移可能会抑制数值——请参见 偏移更改没有可见效果.Convai 发送的服务器标签与已识别标签之一匹配——请参见 情绪系统的工作原理.
完成清单后,如果 打印字符串 在……时触发 情绪状态更改时, 获取情绪分数 返回高于 0.0的值,并且 morph targets 在正确的网格上更新,那么管线就是正常的。
常见问题速查
情绪状态更改时 从不触发
没有活动的 Convai 会话、该响应没有情绪数据包,或者 锁定情绪状态 为 true
检查 Character ID、API 密钥、连接诊断和锁定状态
与角色对话——事件触发且分数高于 0.0
事件触发;面部没有变化
Morph target 名称不匹配
比较 设置 Morph Target 名称与……对照 Morph Targets Skeletal Mesh 上的选项卡
当分数上升时,Morph target 值会在 Details 面板中变化
事件触发; 获取情绪分数 一直保持在 0.0
情绪偏移 抑制分数、未识别的服务器标签,或者 重置情绪状态 在没有新更新的情况下
检查 情绪偏移 值;与角色对话以触发新更新;验证服务器标签
获取情绪分数 返回高于 0.0 在下一次服务器更新时
角色始终显示相同表情
锁定情绪状态 为 true
设置 锁定情绪状态 到 false
解锁后,随着新的语音,表情会变化
强制设置情绪 没有可见结果
Morph target 不匹配,或处理器没有应用分数
确认处理器运行时使用 打印字符串;验证 获取情绪分数 以及 morph target 名称
强制分数与强度乘数匹配,并且面部会更新
偏移更改没有可见效果
偏移仅在新的服务器更新到达时应用
与角色对话以触发新的情绪更新
获取情绪分数 会在下一次更新时反映新的偏置
对话过程中表情从不变化
症状: 角色在说话,但脸部没有显示任何情绪表情变化。 情绪状态更改时 从不触发。
原因: 没有活动的 Convai 会话、Convai 没有为该角色发送情绪数据,或者 锁定情绪状态 正在阻止服务器驱动的更新和事件。
修复:
确认
Convai 聊天机器人组件具有有效的 Character ID 并且插件能够连接到 Convai。设置
锁定情绪状态到false.添加一个
打印字符串节点到情绪状态更改时处理器,以确认事件是否到达你的图表。如果音频正常,但事件仍然从不触发,请导出诊断信息并查看连接日志。
验证: 与角色对话—— 情绪状态更改时 触发,并且 获取情绪分数 返回高于 0.0 对于活动情绪。
“情绪状态更改时”事件触发了,但面部没有变化
症状: 该 打印字符串 处理器内部的事件触发了,但网格上的 morph targets 没有更新。
原因: 分数为零、morph target 名称与 Skeletal Mesh 不匹配,或者 设置 Morph Target 指向了错误的网格组件。
修复:
调用
获取情绪分数在处理器中调用并打印返回值。如果分数是0.0,请检查情绪偏移以及是否有一个重置情绪状态在会话早些时候调用的操作在没有后续服务器更新的情况下将分数清零。确认 Morph Target 名称 在每个
设置 Morph Target节点与 Skeletal Mesh 上的 morph target 名称匹配。打开 Skeletal Mesh 资源,切换到 Morph Targets 选项卡,并比较列出的名称。确认
设置 Morph Target指向拥有 morph targets 的 Skeletal Mesh 组件。
验证: 当 获取情绪分数 高于 0.0,则在 Play In Editor 期间,Details 面板中的 Skeletal Mesh 上对应的 morph target 值会变化。
情绪状态卡住,服务器更新没有效果
症状: 无论角色说话内容如何,它总是显示相同的表情。服务器驱动的更新似乎没有效果。
原因: 锁定情绪状态 为 true,或者重复的 强制设置情绪 调用会覆盖每一次服务器更新。
修复:
设置
锁定情绪状态到false在Convai 聊天机器人组件上。请在 Blueprint 中打印该布尔值以确认运行时的值。在你的 Blueprint 图表中搜索
强制设置情绪在 Tick 或每次响应时触发的调用。移除或限制这些调用,以便服务器更新能够生效。
验证: 设置 锁定情绪状态 到 false,与角色对话,并确认 情绪状态更改时 会在分数变化时触发。
“强制设置情绪”不会明显更新面部
症状: 强制设置情绪 从 Blueprint 调用,但角色的表情没有变化。
原因: 事件处理器没有将分数应用到 morph targets, 重置其他情绪 意外被设置,或者 morph target 名称与网格不匹配。
修复:
添加一个
打印字符串在情绪状态更改时以确认处理器在运行。调用获取情绪分数对于强制情绪——返回值应与强度乘数匹配(0.25,0.60,或1.00).确认 重置其他情绪 按预期设置。如果
false,强制分数会与现有分数合并,可能不会产生可见变化。确认你的
设置 Morph Target节点使用的是 Skeletal Mesh 上存在的 morph target 名称。
验证: 在……之后 强制设置情绪, 获取情绪分数 返回预期值,并且映射的 morph target 会在视口中更新。
偏移更改没有可见效果
症状: 更改 情绪偏移 组件上的内容不会明显改变表情强度。
原因: 情绪偏移 仅在新的服务器驱动更新到达时应用,不会追溯应用。它也不适用于通过……设置的分数 强制设置情绪.
修复:
更改偏移后,与角色对话以触发新的服务器情绪更新。
确认偏移值合理。分数会被限制在
0.0–1.0——极端偏移可能会使所有分数饱和或归零。要测试强制表情,请使用
强制设置情绪使用更高的强度级别,而不是依赖偏移。
验证: 更改偏移后与角色对话—— 获取情绪分数 会在下一次服务器更新时反映新的偏置。
诊断流程图
当文字检查清单无法定位问题时,请使用此流程图。从症状开始,然后沿着与你在 Play In Editor 中观察到的情况相符的分支前进。
相关页面
情感系统如何工作情感 Blueprint 参考情感快速入门情感示例最后更新于
这有帮助吗?