跳转至

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

自定义参数配置

  1. VRCExpressionParameters 中定义参数名和类型
  2. 在 Animator Controller 中使用同名参数
  3. 通过 Expressions Menu 或脚本修改参数值

4. BlendTree 使用

类型

类型 说明 适用场景
1D 单参数线性混合 表情强度渐变(0=中性 → 1=最大化)
2D Simple Directional 二维方向混合 头部转动(上下 + 左右)
2D Freeform Directional 二维自由混合 更复杂的二维参数空间
Direct 直接混合 独立控制每个动画的权重

最佳实践

  • 推荐 1D/2D 混合,阈值按权重线性分布
  • 避免嵌套 > 2 层 BlendTree(性能下降)
  • 结合 Animator.SetFloatCrossFade 实现平滑混合

5. 工作流示例:换装菜单

Expressions Menu
├── Toggle: 上衣 (参数: Wear_Top)
├── Toggle: 裙子 (参数: Wear_Skirt)
├── Toggle: 鞋子 (参数: Wear_Shoes)
├── Toggle: 配饰 (参数: Wear_Accessory)
└── Sub Menu: 表情
    ├── Toggle: 微笑 (参数: Face_Smile)
    ├── Toggle: 生气 (参数: Face_Angry)
    └── Toggle: 眨眼 (参数: Face_Wink)
ggle: 微笑 (参数: Face_Smile) ├── Toggle: 生气 (参数: Face_Angry) └── Toggle: 眨眼 (参数: Face_Wink) ```### FX Layer 对应配置
FX Layer Animator:
├── Default State (默认外观)
├── State: Show Top (条件: Wear_Top = true)
├── State: Show Skirt (条件: Wear_Skirt = true)
├── State: Show Shoes (条件: Wear_Shoes = true)
└── State: Smile (条件: Face_Smile = true)