title: VRChat 动画系统 created: 2026-05-01 updated: 2026-05-01 type: reference tags: [vrchat, animation, animator, layer, expression, blendtree]
🎬 VRChat 动画系统
Animator 图层、Expression Parameters、BlendTree 最佳实践的完整指南。
1. 5 大图层详解
Base Layer(基础层)
- 权重: 1.0 | 混合模式: Override
- 职责: 待机呼吸、行走、奔跑、跳跃
- 内容: Idle/Walk/Run/Jump State Machine
- 自定义: 通常使用 VRChat 默认控制器,或自定义 Idle 动画
Additive Layer(叠加层)
- 权重: 1.0 | 混合模式: Additive
- 职责: 面部表情同步(眨眼、张嘴、眉毛)
- 内容: BlendShape 驱动的叠加动画
- 关键: 使用 Additive 模式,不影响 Base 层的基础动画
Gesture Layer(手势层)
- 权重: 1.0 | 混合模式: Override
- 职责: 手部姿势切换(握拳、指向、和平手势、OK 手势)
- 参数:
GestureLeft/GestureRight(Int 0-7) - 手势值: | 值 | 手势 | |:---:|:---| | 0 | 默认 | | 1 | 握拳 (Fist) | | 2 | 张开手 (OpenHand) | | 3 | 指 (Point) | | 4 | 和平 (Peace) | | 5 | 摇滚 (RockNRoll) | | 6 | 手枪 (Gun) | | 7 | 拇指朝上 (ThumbsUp) |
Action Layer(动作层)
- 权重: 1.0 | 混合模式: Override
- 职责: 全身特殊动作(坐、躺、舞蹈、道具使用)
- 内容: 全身动画覆盖 Base 层
- 典型用法: 坐在椅子上时覆盖站立姿态
FX Layer(特效层)
- 权重: 1.0 | 混合模式: Additive
- 职责: 粒子特效、Toggle 显示、材质切换
- 内容: 自定义 State Machine
- 典型用法:
- 换装菜单(Toggle 显示/隐藏部件)
- 表情切换(微笑、生气等面部表情)
- 特效开关(光环、翅膀等粒子效果)
Sitting Layer(坐下层)
- 权重: 1.0 | 混合模式: Override
- 职责: 专门处理坐下的动画与骨骼权重
- 内容: 坐姿动画,VRCSDK 自动管理
2. Animator Controller 最佳实践
分离逻辑
- 使用独立 State Machine 管理 Toggle/表达式
- 避免跨层干扰 动画,VRCSDK 自动管理
2. Animator Controller 最佳实践
分离逻辑
- 使用独立 State Machine 管理 Toggle/表达式
- 避免跨层干扰### 参数复用
- 总参数 ≤ 256(与 Expression Parameters 共享)
- 优先使用 Bool/Int,Float 仅在需要连续控制时使用
VRC_Animator_Lock
- 锁定关键状态,防止客户端覆盖
- 使用
VRC_Animator_Lock参数锁定 State
Transition 设计
- 避免复杂 Transition 条件
- 使用
Exit Time或脚本控制更稳定 - 关闭
Has Exit Time实现即时切换(Toggle 场景)
3. Expression Parameters
参数类型
| 类型 | 取值范围 | 典型用途 |
|---|---|---|
Bool |
true/false | Toggle 显示/隐藏、开关特效 |
Int |
0-255 | 手势切换、菜单选择 |
Float |
0.0-1.0 | 表情混合权重 |
系统预留参数
以下参数由 VRChat 系统管理,不可用于自定义:
Viseme, GestureLeft, GestureRight, Angry, Happy, Sad, Surprised, Mouth, Velocity, VelocityAngular, Upright, Grounded
自定义参数配置
- 在
VRCExpressionParameters中定义参数名和类型 - 在 Animator Controller 中使用同名参数
- 通过 Expressions Menu 或脚本修改参数值
4. BlendTree 使用
类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 1D | 单参数线性混合 | 表情强度渐变(0=中性 → 1=最大化) |
| 2D Simple Directional | 二维方向混合 | 头部转动(上下 + 左右) |
| 2D Freeform Directional | 二维自由混合 | 更复杂的二维参数空间 |
| Direct | 直接混合 | 独立控制每个动画的权重 |
最佳实践
- 推荐 1D/2D 混合,阈值按权重线性分布
- 避免嵌套 > 2 层 BlendTree(性能下降)
- 结合
Animator.SetFloat与CrossFade实现平滑混合