For the complete documentation index, see llms.txt. This page is also available as Markdown.

情绪示例

七个完整场景,涵盖危险覆盖、锁定表情、情绪变化、紧张分支、分析日志记录和无代码 UI 连接。

这些场景展示了 Emotion 系统的配置和脚本 API 如何结合起来满足真实的应用需求。每个场景都是自包含的:先描述 Inspector 设置,然后给出完成该行为所需的任何运行时代码。配置文件字段引用见 情绪配置文件;完整脚本接口见 情绪脚本 API.

场景 1:动态危险响应

情境: 一名讲师 NPC 引导受训者完成消防疏散模拟。当受训者进入标记的危险区域时,讲师的表情应迅速转为恐惧或紧迫,以强化情境的严肃性。当受训者离开该区域时,表情恢复为服务器驱动的状态。

配置文件设置

打开 ConvaiEmotionProfile 分配给讲师 NPC 并调整:

  • lerpSpeed12 ——快速上升,使恐惧表情立即呈现。

  • microBurstOvershoot1.6 ——明显的突增让过渡更具视觉冲击力。

  • microBurstDuration0.2 s ——在表情稳定前的短暂突发。

运行时脚本

using Convai.Modules.Emotion.Components;
using UnityEngine;

public sealed class HazardZoneTrigger : MonoBehaviour
{
    [SerializeField] private ConvaiEmotionController instructorEmotion;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Trainee"))
            instructorEmotion.SetEmotionOverride("fear", 0.9f);
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Trainee"))
            instructorEmotion.ClearEmotionOverride();
    }
}

SetEmotionOverride 会在 Convai 当前发送的内容之上叠加恐惧分数。累加器会在配置的 lerpSpeed,因此覆盖会快速但自然地到达。 ClearEmotionOverride 在触发器退出时调用,可让服务器发出恢复完全控制的信号。角色本身无需逐槽编写——表情配方会自动解析 "fear" 并映射到角色的骨骼绑定上。


场景 2:锁定的欢迎表情

情境: 一名迎宾 NPC 站在入门引导模拟的入口。在欢迎流程期间——在受训者开始说话之前——无论 Convai 在连接握手期间发送任何情绪信号,角色都应始终显得温暖且易于接近。

运行时脚本

锁定的强度为 0.65 会产生一个可见但不过度夸张的微笑——适合专业场景。 UnlockEmotion 会在模拟切换到开放对话时调用,此时角色开始响应实时 AI 信号。


场景 3:会话中逐渐变得更温暖的角色

情境: 客户服务培训 NPC 应该在每个会话开始时保持中性、专业的静息情绪,并在受训者把对话处理得很好时明显地逐渐变得更温暖——这是培训师之后可以指给人看的静息情绪变化,区别于对话过程中任何瞬时反应。

运行时脚本

SetMood 会改变角色的 静息情绪 ——表情在瞬时反应之间回落到的情绪——而不是注入一次性的表情。四秒的过渡会被理解为逐渐升温,而不是突然的情绪波动。 ClearMood 在会话重置时会将角色恢复到其预设基线。参见 情绪状态 ,了解静息情绪与瞬时情绪的区别,以及 情绪脚本 API 完整的优先级规则。


场景 4:情绪感知分支逻辑

情境: 医疗沟通评估中的虚拟患者 NPC 会在受训者的回应被视为敷衍时变得沮丧。一个导演脚本监视该 NPC 的情绪状态,如果检测到持续的沮丧,就将场景分支到缓和路径。

运行时脚本

DominantHoldSeconds 用于跟踪当前主导情绪已持续保持了多长时间。将它与分数阈值一起使用,可以防止瞬时峰值触发分支——只有真正持续的沮丧才会推进场景。


场景 5:会话分析日志记录

情境: 培训平台需要记录 AI 角色在会话中经历的每一次情绪变化,包括原始服务器标签和强度,以便讲师在会话后报告中回顾对话的情绪轨迹。

运行时脚本

OnCharacterEmotionChanged 会在来自 Convai 的每一条情绪信号上触发,而且是在控制器对其进行平滑或处理之前触发。这使分析代码能够访问原始信号,而不是插值后的视觉状态,这对于会话回顾更有意义。如果你想记录角色最终实际表现出来的内容,请订阅 DominantEmotionChanged/MoodChanged ——参见 情绪脚本 API.


场景 6:无代码 UI 显示

情境: 某个非程序员希望在角色当前情绪变化时更新显示该情绪的 UI 标签,而无需编写任何代码。

1

添加事件中继

选择 NPC 的根 GameObject。点击 Add Component 并导航到 Convai → Events → Convai Character Event Relay.

中继会自动解析 ConvaiCharacter 同一 GameObject 上的,借助 Auto Resolve Character 切换开关完成,默认已启用。

2

连接 On Emotion Changed 事件

On Emotion Changed 在以下对象的 Unity Event 列表中 ConvaiCharacterEventRelay,点击 +.

3

分配 UI Text 组件

拖动你的 UI Text (或 TMP_Text)组件到新事件条目的对象字段中。

4

选择目标属性

在函数下拉菜单中选择 Text → string text (或 TMP_Text → string text).

现在每当角色的情绪变化时, 情绪 来自 CharacterEmotionRelayData 的属性会直接写入标签——无需代码。

ConvaiCharacterEventRelay 会传递原始服务器标签(例如 "happy")。如果你需要更友好的显示名称(例如 "喜悦" 而不是 "happy"),可添加一个小型格式化脚本,将原始标签映射为显示字符串,或者在 UnityEvent 目标方法中对该字符串进行后处理。


场景 7:在编辑器中预览表情

情境: 你已经为角色配置了骨骼绑定,并希望在进入 Play Mode 之前确认每种情绪是否能驱动出可识别的表情。

  1. 选择 NPC 的根 GameObject。

  2. ConvaiEmotionController 组件上,启用 锁定情绪.

  3. 锁定情绪标签 为你想预览的规范标签(例如 "anger").

  4. 锁定强度1.0.

Scene 视图会立即更新——由于 ConvaiEmotionController 继承自 [ExecuteAlways] 其基类,表情配方会在编辑模式下解析并应用。你可以在你的分类法中轮流切换各个标签,以可视化方式验证每个表情,或者使用 情绪编辑器窗口 在打开的场景中对每个角色进行引导式预览。

下一步

有关上述配置文件设置中使用的完整参数参考,请参见 情绪配置文件。有关完整脚本接口,请参见 情绪脚本 API。如果任何场景未产生预期结果,请参见 情绪故障排查.

情绪配置文件情绪脚本 API情绪故障排查

最后更新于

这有帮助吗?