当前 VRM 动画系统架构

两条独立线路,仅在 _speakingEmotion 处交汇

线路 A:LLM 情绪
LLM 输出 [情绪:joy/0.7]
你好!
↓ EmotionParser 解析
emit chat:emotion
{emotion:"joy", intensity:0.7}
↓ applyEmotion()
blendshape
happy = 0.7 ✅
_speakingEmotion
"joy" ✅
⚠️ thinking/idle/listening 状态:emotion 被忽略
线路 B:状态驱动
后端 emit pet:state:change
"speaking"
↓ watch(petState)
setState()
保留 blendshape
applyStateAnimation()
celebrate.vrma
状态→动画(硬编码)
idle → waiting
thinking → waiting
speaking → hand_talk 或 emotion覆盖
listening → curious
error → embarrassed

核心问题

状态 emotion 影响 blendshape emotion 影响动画 理应是?
idle 设置 target 但切换时清零 ❌ 永不 emotion 驱动表情
thinking ✅ 保留 ❌ 永不 emotion 驱动思考动画
speaking ✅ 保留 ✅ 仅此状态 ✅ 已正常
listening 设置 target 但切换时清零 ❌ 永不 emotion 驱动表情