> For the complete documentation index, see [llms.txt](https://docs.convai.com/api-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/troubleshoot-emotion.md).

# 排查情绪问题

大多数情绪问题可归为三类：没有 `情绪状态更改时` 事件根本没有触发、事件触发了但面部没有移动，或者因锁定而状态卡住。首先添加一个 `打印字符串` 在你的 `情绪状态更改时` 处理器中——这一个信号可以判断问题是在会话/信号路径中，还是在 Morph Target 应用过程中。

### 检查实时状态

该 `UConvaiChatbotComponent` 可在 Play In Editor 期间，从 Blueprint 中随时查询情绪状态，无需额外工具。

| 检查什么      | 如何检查                     | 它告诉你什么                                    |
| --------- | ------------------------ | ----------------------------------------- |
| 事件是否触发    | Add `打印字符串` 在 `情绪状态更改时`  | 如果它从不触发，则会话没有传递情绪数据，或者 `锁定情绪状态` 正在阻止服务器更新 |
| 特定情绪的当前分数 | 调用 `获取情绪分数` 并连接到 `打印浮点数` | 高于……的值 `0.0` 确认情绪处于活动状态                   |
| 状态是否被锁定   | 打印 `锁定情绪状态` bool 属性      | `true` 表示服务器更新和服务器驱动的事件会被抑制               |

要在不依赖实时对话的情况下验证 Morph Target 映射，请调用 `强制设置情绪` 从 `BeginPlay`、一个临时的 Blueprint 输入或测试事件，或者一个调用……的自定义可在编辑器中调用的包装函数 `强制设置情绪`。然后检查是否 `获取情绪分数` 返回预期值，并且你的 `设置 Morph Target` 节点有响应。

{% hint style="danger" %}
`锁定情绪状态` 是一个已复制属性。如果你在测试期间将其设置为 `true` ，请确认它在发布前被重置为 `false` 再发布之前——锁定状态会在不产生运行时错误的情况下静默抑制所有实时情绪响应。
{% endhint %}

### 第一线排查

当情绪表现不符合预期时，按顺序完成这份检查清单。大多数问题在第 1 或第 2 步就能解决。

{% stepper %}
{% step %}

#### 确认会话处于活动状态

该 `Convai 聊天机器人` 组件必须具有有效的 **Character ID** 并且能够连接到 Convai。如果没有活动会话，则不会发送情绪数据。

* 正常与角色对话并确认它有音频响应。如果没有音频，先修复会话。
* 如果音频正常，但情绪事件仍然从不触发，请导出诊断信息并查看连接日志，然后再将角色配置问题上报给 Convai 支持。
  {% endstep %}

{% step %}

#### 检查“情绪状态更改时”是否触发

添加一个 `打印字符串` 节点到 `情绪状态更改时` 事件处理器中。进入 Play In Editor 并与角色对话。

* **打印字符串会触发** → 信号路径正常。跳到第 4 步。
* **打印字符串从不触发** → 事件没有到达你的处理器。继续第 3 步。
  {% endstep %}

{% step %}

#### 检查锁定情绪状态

当 `锁定情绪状态` 为 `true`，服务器驱动的更新会被丢弃 **和** `情绪状态更改时` 不会针对这些更新触发。

* **`锁定情绪状态` 为 `true`** → 将 `false` 其设置为以恢复服务器更新和事件。
* **`锁定情绪状态` 为 `false`** → 问题在上游。确认聊天机器人组件具有有效的 Character ID，并且插件能够连接到 Convai。
  {% endstep %}

{% step %}

#### 检查情绪分数

在你的事件处理器中，调用 `获取情绪分数` 你期望的情绪，并打印返回值。确认：

1. 分数高于 `0.0` 当角色说出带有情绪内容的话时。如果分数一直保持在 `0.0`, `情绪偏移` 可能会抑制数值——请参见 [偏移更改没有可见效果](#offset-changes-have-no-visible-effect).
2. Convai 发送的服务器标签与已识别标签之一匹配——请参见 [情绪系统的工作原理](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/how-the-emotion-system-works.md#server-emotion-labels).
   {% endstep %}

{% step %}

#### 确认“设置 Morph Target”指向的是正确的网格

如果分数高于 `0.0` 但面部没有移动：

1. 确认 **Morph Target 名称** 在每个 `设置 Morph Target` 节点上的名称与角色的 Skeletal Mesh 中的名称完全一致。打开 Skeletal Mesh 资源并检查 **Morph Targets** 选项卡。名称不匹配会导致 `设置 Morph Target` 悄无声息地不起作用。
2. 如果角色使用多个 Skeletal Mesh 组件（身体、头部、头发），请确认每个 `设置 Morph Target` 调用都指向拥有 morph targets 的网格。
   {% endstep %}
   {% endstepper %}

{% hint style="success" %}
完成清单后，如果 `打印字符串` 在……时触发 `情绪状态更改时`, `获取情绪分数` 返回高于 `0.0`的值，并且 morph targets 在正确的网格上更新，那么管线就是正常的。
{% endhint %}

### 常见问题速查

| 症状                         | 最可能的原因                                          | 修复                                                                 | 验证                                    |
| -------------------------- | ----------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------- |
| `情绪状态更改时` 从不触发             | 没有活动的 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 没有为该角色发送情绪数据，或者 `锁定情绪状态` 正在阻止服务器驱动的更新和事件。

**修复：**

1. 确认 `Convai 聊天机器人` 组件具有有效的 **Character ID** 并且插件能够连接到 Convai。
2. 设置 `锁定情绪状态` 到 `false`.
3. 添加一个 `打印字符串` 节点到 `情绪状态更改时` 处理器，以确认事件是否到达你的图表。
4. 如果音频正常，但事件仍然从不触发，请导出诊断信息并查看连接日志。

**验证：** 与角色对话—— `情绪状态更改时` 触发，并且 `获取情绪分数` 返回高于 `0.0` 对于活动情绪。

***

### “情绪状态更改时”事件触发了，但面部没有变化

**症状：** 该 `打印字符串` 处理器内部的事件触发了，但网格上的 morph targets 没有更新。

**原因：** 分数为零、morph target 名称与 Skeletal Mesh 不匹配，或者 `设置 Morph Target` 指向了错误的网格组件。

**修复：**

1. 调用 `获取情绪分数` 在处理器中调用并打印返回值。如果分数是 `0.0`，请检查 `情绪偏移` 以及是否有一个 `重置情绪状态` 在会话早些时候调用的操作在没有后续服务器更新的情况下将分数清零。
2. 确认 **Morph Target 名称** 在每个 `设置 Morph Target` 节点与 Skeletal Mesh 上的 morph target 名称匹配。打开 Skeletal Mesh 资源，切换到 **Morph Targets** 选项卡，并比较列出的名称。
3. 确认 `设置 Morph Target` 指向拥有 morph targets 的 Skeletal Mesh 组件。

**验证：** 当 `获取情绪分数` 高于 `0.0`，则在 Play In Editor 期间，Details 面板中的 Skeletal Mesh 上对应的 morph target 值会变化。

***

### 情绪状态卡住，服务器更新没有效果

**症状：** 无论角色说话内容如何，它总是显示相同的表情。服务器驱动的更新似乎没有效果。

**原因：** `锁定情绪状态` 为 `true`，或者重复的 `强制设置情绪` 调用会覆盖每一次服务器更新。

**修复：**

1. 设置 `锁定情绪状态` 到 `false` 在 `Convai 聊天机器人` 组件上。请在 Blueprint 中打印该布尔值以确认运行时的值。
2. 在你的 Blueprint 图表中搜索 `强制设置情绪` 在 Tick 或每次响应时触发的调用。移除或限制这些调用，以便服务器更新能够生效。

**验证：** 设置 `锁定情绪状态` 到 `false`，与角色对话，并确认 `情绪状态更改时` 会在分数变化时触发。

***

### “强制设置情绪”不会明显更新面部

**症状：** `强制设置情绪` 从 Blueprint 调用，但角色的表情没有变化。

**原因：** 事件处理器没有将分数应用到 morph targets， `重置其他情绪` 意外被设置，或者 morph target 名称与网格不匹配。

**修复：**

1. 添加一个 `打印字符串` 在 `情绪状态更改时` 以确认处理器在运行。调用 `获取情绪分数` 对于强制情绪——返回值应与强度乘数匹配（`0.25`, `0.60`，或 `1.00`).
2. 确认 **重置其他情绪** 按预期设置。如果 `false`，强制分数会与现有分数合并，可能不会产生可见变化。
3. 确认你的 `设置 Morph Target` 节点使用的是 Skeletal Mesh 上存在的 morph target 名称。

**验证：** 在……之后 `强制设置情绪`, `获取情绪分数` 返回预期值，并且映射的 morph target 会在视口中更新。

***

### 偏移更改没有可见效果

**症状：** 更改 `情绪偏移` 组件上的内容不会明显改变表情强度。

**原因：** `情绪偏移` 仅在新的服务器驱动更新到达时应用，不会追溯应用。它也不适用于通过……设置的分数 `强制设置情绪`.

**修复：**

1. 更改偏移后，与角色对话以触发新的服务器情绪更新。
2. 确认偏移值合理。分数会被限制在 `0.0`–`1.0` ——极端偏移可能会使所有分数饱和或归零。
3. 要测试强制表情，请使用 `强制设置情绪` 使用更高的强度级别，而不是依赖偏移。

**验证：** 更改偏移后与角色对话—— `获取情绪分数` 会在下一次服务器更新时反映新的偏置。

***

### 诊断流程图

当文字检查清单无法定位问题时，请使用此流程图。从症状开始，然后沿着与你在 Play In Editor 中观察到的情况相符的分支前进。

```mermaid
flowchart TD
    A([表情没有变化]) --> B{“情绪状态更改时”是否触发？}
    B -- No --> C{锁定情绪状态是否为 true？}
    C -- Yes --> D[将锁定情绪状态设为 false]
    C -- No --> E{是否有活动的 Convai 会话？}
    E -- No --> F[修复会话：检查 Character ID\n和 API 密钥]
    E -- Yes --> G[导出诊断信息并查看\n连接日志]
    B -- Yes --> H{获取情绪分数\n是否返回高于 0.0 的值？}
    H -- No --> I[检查情绪偏移值；\n与角色对话以触发新更新]
    H -- Yes --> J{morph target 名称是否匹配\nSkeletal Mesh？}
    J -- No --> K[修复 morph target 名称：\n从 Morph Targets 选项卡复制精确名称]
    J -- Yes --> L{设置 Morph Target 是否指向\n正确的网格组件？}
    L -- No --> M[重新指向拥有\nmorph targets 的网格]
    L -- Yes --> N[管线正常——检查\n每次更新的处理器连线]
```

***

### 相关页面

{% content-ref url="/pages/c3081281b873e1a1b00439a147d3db6877743003" %}
[情绪系统的工作原理](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/how-the-emotion-system-works.md)
{% endcontent-ref %}

{% content-ref url="/pages/9ac48061a03a0400ae6e1769df358c2fb2a82536" %}
[Emotion Blueprint 参考](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/emotion-blueprint-reference.md)
{% endcontent-ref %}

{% content-ref url="/pages/760d975e7440e1f0f9fb57d5477018161e976844" %}
[情绪快速开始](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/emotion-quick-start.md)
{% endcontent-ref %}

{% content-ref url="/pages/83566839f3555aa1855858bb1bc0c20ed5a973cc" %}
[情绪示例](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/emotion-examples.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/emotion/troubleshoot-emotion.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
