> 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-unity-sdk/embodiment/body-language/how-body-language-works.md).

# 肢体语言如何运作

了解 Body Language 如何在每个 tick 驱动 Convai 角色的姿态、呼吸和手势，以及它如何让位于脚本手势。

每个 tick， `ConvaiBodyLanguageController` 读取角色的对话状态和情绪，确定它此刻的行为应当呈现为什么样子，并将该行为与 Body Animation 和 Gaze 已经写入的内容一起合成到骨架上。本页说明是什么驱动该决策、哪些部分产生动作，以及防止 Body Language 与脚本化手势相互冲突的规则。关于这些机制所构建其上的 composition-root 模型，请参见 [角色 Embodiment](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/core-concepts/character-embodiment.md).

***

### 每个 tick 驱动身体的因素

在 embodiment 中 `认知` tick 中，控制器读取角色当前的 [对话状态](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/core-concepts/dialogue-state.md) 以及其情绪读数，然后解析该状态下配置文件的策略——手势强度、聆听前倾、姿态偏置、呼吸频率和深度、坐立不安频率。状态变化从不会让策略骤然跳变：各项值会在配置文件的 `策略过渡秒数` 中平滑过渡，这样角色在开始说话的瞬间就不会明显地突然一震。

在后面的 `表情` 在 Animator 或 `PlayableGraph` 已经为骨架摆好姿势、而在 Gaze 之前，控制器的求解器会朝该 tick 的目标推进，并将每个通道——脊柱、肩膀、骨盆、头部手势回退——累积到一个共享合成器上，该合成器对每根骨骼恰好执行一次受保护写入。两个 Body Language 行为绝不可能在同一根骨骼上形成无界增量，因为始终只有一个写入者。

***

### 合成到身体上的行为

在内部，十个协作部分各自生成这种行为的一部分。它们都不是公开 API——你通过 [调节表现力](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/embodiment/body-language/tune-expressiveness.md) 以及 [配置文件参考](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/embodiment/body-language/profile-reference.md)，而不是直接调用它们。

| 行为    | 它产生的内容                                             |
| ----- | -------------------------------------------------- |
| 姿态    | 当前状态和情绪下持续的开放感、前倾和肩部紧张轮廓。                          |
| 呼吸    | 持续的胸部和肩部扩张循环，以及屏气、叹息和开口前吸气事件。                      |
| 手势    | 说话时与语音能量同步的头部节拍和姿态脉冲，以及手势之间的空闲手部和手腕微动。             |
| 聆听姿态  | 角色在聆听时会进入的前倾与静止状态。                                 |
| 小动作   | 缓慢的空闲重心转移，让静止的角色看起来不像僵住了。                          |
| 站姿    | 站立身体执行的周期性骨盆重心转移和偏航循环。                             |
| 姿态摆动  | 脊柱上持续的、不到一度的漂移，看起来像持续的微平衡，而不是抖动。                   |
| 空闲宏周期 | 在呼吸深度、摆动和小动作节奏上极慢、持续数分钟的漂移，使长时间空闲永远不会稳定成一个明显循环的基线。 |
| 反应    | 由突发情绪激增自动触发或按需触发的一次性受惊退缩和愉悦弹跳。                     |
| 头部手势  | 点头、摇头和歪头，无论来自随说话节拍、聆听时的倾斜保持，还是脚本化请求。               |

这些行为旁还运行着一个相机距离缩放：主摄像机离角色越远，摆动和手部微动的呈现就越大，因此小幅摆动在远处不会消失，在特写中也不会显得过度。它从不影响呼吸、姿态或手势——只影响环境质感。

***

### 它如何与 Gaze 和 Body Animation 共享骨骼

Body Language、Gaze 和 Body Animation 都可能同时关注同一条脊柱、肩膀和头部。Convai 通过协同而不是让一个模块压制另一个模块来解决这一点：Gaze 自己的躯干瞄准行为也是通过 Body Language 所写入的同一个共享合成器进行合成，因此二者从不会持有可能在同一根骨骼上竞争的独立写入保护。当 Body Animation 播放走路循环或全身动作时，它会在该段时间内接管身体——这是有意的交接，而不是冲突。

{% hint style="info" %}
支撑这种协同的契约——Gaze 如何注册其躯干瞄准入口、Body Animation 如何报告自己正在播放什么——都属于包内部实现。你无需直接实现或调用它们；你只会在角色的移动方式中看到它们的效果。
{% endhint %}

***

### 它如何让位于脚本化手势

Body Animation 的 talk-clip 系统可以每个 tick 报告一个抑制级别，而 Body Language 的整个伴随说话系统会先读取它，再决定要做多少：

| 抑制                         | 头部节拍 | 姿态脉冲 | 语义手势提示 | 姿态与呼吸         |
| -------------------------- | ---- | ---- | ------ | ------------- |
| 无（或未注册表演者）                 | 完全   | 完全   | 可执行    | 完全权重          |
| 上半身（正在播放上半身 talk clip 或移动） | 完全   | 降低   | 拒绝     | 姿态减弱，呼吸保持完全权重 |
| 全身（正在播放全身动作或转身）            | 无    | 无    | 拒绝     | 两者都淡出至零       |

这就是为什么这两个模块看起来从不在互相争抢：当 Body Animation 播放一个预设的上半身手势时，Body Language 会让角色继续呼吸并保持头部节拍，但不会在同一动作上再叠加自己的姿态脉冲。呼吸被刻意设计为永不被抑制，即使在完全抑制下姿态和手势也会淡出——一个在做手势时停止呼吸的角色，会以一种其他任何表现都无法达到的方式显得异常。

***

### 下一步

{% content-ref url="/pages/b2ad39829dc48a1cbdd51297da72ea87b10b339f" %}
[肢体语言快速入门](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/embodiment/body-language/quick-start.md)
{% endcontent-ref %}

{% content-ref url="/pages/652efa54160d6791ad8f9dfe70dc962fa595d73a" %}
[调节表现力](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/embodiment/body-language/tune-expressiveness.md)
{% endcontent-ref %}

{% content-ref url="/pages/36545202fce61c9549c36fc04283ca75f22dd128" %}
[肢体语言故障排查](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/embodiment/body-language/troubleshooting.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, and the optional `goal` query parameter:

```
GET https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unity-sdk/embodiment/body-language/how-body-language-works.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
