动画触发时机:两种哲学

情绪标签在流式输出中先于正文到达,何时切换动画?

时序关系

thinking 开始 [情绪:joy/0.7] 你好!今天... 天气不错... done
A

情绪 = 预告(立即切换)

情绪标签一解析到就立刻切换动画,不等待正文。就像人开口前表情先变化。

thinking → 解析到 joy/0.7立即切换 celebrate.vrma → 正文流式输出 → idle

优点

  • 表情预告,更自然
  • thinking 状态下也能换动画

缺点

  • 可能和实际说话内容有时间差
B

情绪 = 演绎风格(延迟到 speaking)

情绪标签只记录,等正文开始输出(petState→speaking)时才应用动画。

thinking → 解析到 joy/0.7(记录) → 正文开始 → 切换 celebrate.vrma → idle

优点

  • 动画和语音同步
  • 和当前逻辑最接近

缺点

  • thinking 期间空白表情
  • 实际就是现状

我的推荐:A

情绪标签在 token 流中最先到达,立刻切换动画意味着 pet 的表情/身体语言在正文到达前就已经变化——就像人说话前先有表情。而且这从根本上解决了「thinking 状态无法被 emotion 驱动」的问题。

实际上这个选择会导向一个更简洁的架构:emotion 驱动动画,petState 只提供默认 fallback