情绪分类法
EmotionTaxonomyAsset 参考,包括内置情绪集、服务器别名解析和自定义分类法编写。
该分类法将 Convai 的原始情绪字符串转换为 Emotion 模块其余部分使用的规范标签。当 Convai 发送 "happy" 时,分类法会将该别名解析为 "快乐" ,这样以规范标签为键的累加器和表情管线就能准确知道要更新哪个分数。SDK 随附一个受 Plutchik 启发的九情绪默认集;当你需要不同的词汇或额外的服务器别名时,可以编写自定义 EmotionTaxonomyAsset 。
内置分类法
当 taxonomy 字段在一个 ConvaiEmotionProfile 中留空时,系统会在运行时合成以下集合。这个默认集涵盖了 Convai 当前产生的每一种情绪,并且无需创建任何资源。
neutral
平静, 空闲
0.0
喜悦
快乐, 快乐, 狂喜, 宁静, 兴奋, 热情
0.6
信任
接受, 钦佩, 自信, 安心
0.3
恐惧
害怕, 忧惧, 惊恐, 害怕, 担忧, 焦虑, 紧张
0.4
惊讶
惊奇, 分心, 惊讶
0.5
悲伤
难过, 沉思, 悲痛
0.3
厌恶
厌恶, 憎恶, 无聊, 无聊
0.4
愤怒
生气, 恼怒, 狂怒
0.55
期待
兴趣, 警惕, 好奇, 好奇心, 渴望, 充满希望
0.45
默认口部影响 是一个按情绪划分的提示值(0–1),用于告诉面部合成器:当角色不在说话时,由情绪驱动的口型应贡献多少。主动说话期间,LipSync 负责口部 blendshape;在非说话状态下,该值控制情绪姿态对口部区域的塑形强度。
内置集合中每个非中性条目还带有一个 互补项 —— 一个相关情绪,在 情绪混合 开启时出现。 喜悦 和 信任 时会以较低强度一并出现; 恐惧 和 惊讶 彼此互为互补; 悲伤 互补项 厌恶; 厌恶 互补项 愤怒; 愤怒 互补项 厌恶; 期待 互补项 喜悦.
别名解析的工作方式
每当 Convai 发送一个情绪时,控制器都会调用 IEmotionTaxonomy.TryResolve(serverLabel, out EmotionDescriptor descriptor)。解析器会先检查规范标签,然后再检查所有条目中的完整别名列表。
如果该标签成功解析,管线中就会始终使用对应的规范标签和描述符。
如果该标签 不会 无法解析,控制器会回退到中性描述符。 不会产生控制台警告。 管线会继续正常运行,每一帧都写入中性分数。
示例: Convai 发送 "happy" → TryResolve 在 "happy" 的别名列表中找到 喜悦 条目 → 累加器将 "快乐".
当 Convai 发送一个不在该分类法中的标签时,失败是静默的——不会出现控制台警告,也不会记录错误。角色会回到中性状态,就像没有收到情绪信号一样。如果某个特定情绪从未出现在你的角色上,那么服务器标签很可能没有被当前分类法覆盖。请参见 情绪故障排查 了解如何检测并修复此问题。
创建自定义分类法资源
在 Project 窗口中,右键单击你的 Assets/ 文件夹内,然后选择:
创建 → Convai → 具身 → 情绪分类法
一个名为 EmotionTaxonomy 会出现。选择它,然后在 Inspector 中编辑条目列表。
EmotionTaxonomyEntry 字段
label
string
管线中使用的规范、小写标签(例如 "快乐")。在该分类法中必须唯一。
aliases
List<string>
所有应解析到此条目的服务器端字符串(例如 "happy", "happiness").
defaultMouthInfluence
float (0–1)
用于 LipSync 混合的口部影响提示值。参考值请见上面的内置表。
isNeutral
bool
将此条目标记为该分类法的中性基线——面部在不同情绪之间恢复放松到的状态,以及累加器的衰减锚点。
useCustomDimensions
bool
启用后,此条目的 效价/唤醒度/能动性/趋近 字段将覆盖该标签内置的维度默认值。禁用时,这些值将从 EmotionDimensionDefaults 中为已知标签解析得到。
效价, 唤醒度, 能动性, 趋近
float (-1 – 1)
该 EmotionDimensions 该情绪携带的内容:有多愉快、多激动、多有掌控感,以及它会让角色更接近还是远离引发它的事物。被 Gaze、Body Language 和 locomotion 作为与类别标签并列的共享调制信号使用。仅在 useCustomDimensions 为 true.
必须且只能有一个条目具有 isNeutral = true. 累加器会将中性条目用作其衰减锚点。如果没有条目标记为中性,或者有多个条目标记为中性,系统会记录一条警告并合成一个回退项——但表情在运行时不会正确稳定下来。控制台警告信息为:
[EmotionTaxonomyAsset] 此情绪词汇表没有将任何情绪标记为中性,因此正在使用一个替代项。请在且仅在一个情绪上勾选“Is Neutral”——它就是面部在不同情绪之间恢复放松到的状态。—— 未找到中性条目[EmotionTaxonomyAsset] 此词汇表中有 N 个情绪被勾选了“Is Neutral”,只会使用第一个。请取消其他条目的勾选,以便明确面部会恢复放松到哪一个。—— 找到了多个中性条目
将自定义分类法分配给配置文件
打开你的
ConvaiEmotionProfile资源。拖入自定义的
EmotionTaxonomyAsset到 分类法 字段。控制器会在下次应用该配置文件时拾取新的分类法——在 Play Mode 中会立即生效,在 Edit Mode 中也会立即生效,因为
ConvaiEmotionController从其基类中[ExecuteAlways]继承了
何时创建自定义分类法
内置的 Plutchik 集涵盖了 Convai 当前发送的所有情绪。当以下情况出现时,创建自定义分类法就很有价值:
你的 Convai 配置使用了不同于内置别名的自定义情绪标签。
你想使用不同的概念模型——例如 Ekman 的六种基本情绪——并将多个服务器别名映射到更少的规范桶中。
你想调整
defaultMouthInfluence值,以便更好地适配你的角色骨骼。你需要定义
互补项关系,用于情绪混合,或者编写效价/唤醒度/能动性/趋近与内置默认值不同的维度。
下一步
情绪脚本 API情绪故障排查最后更新于
这有帮助吗?