跳转至

title: 多套衣服更换架构 description: V3版 — 基于 taozhuang 参数的多套衣服更换方案 created: 2026-05-09 updated: 2026-05-14 type: guide tags: [vrchat, avatar, outfit, switching, blendtree, v3, taozhuang]


多套衣服更换架构

[!NOTE] 本文档为 V3 版本,示例参数已更新为 taozhuang(原 Outfit 已废弃)。 V3 实现参考 Cazalis_FX_Modified_V3.controller(Layer 18-21)。

方案对比

方案 参数使用 灵活性 复杂度
独立 Bool 多 Bool
Int 分组 1 Int
BlendTree 1 Float/Int

方案A:Int 参数分组(推荐)

参数定义

taozhuang (Int)
  // 0 = 原皮(yuanpi)
  // 1 = 露肩短裙(mox)
  // 2 = 休闲服(xiuxian)
  // 3 = 开衫毛衣(ksmy)

V3 方案使用 taozhuang 作为统一参数,替代旧版的 Outfit

优点

  • 1个 Int 可以表示 255 种状态
  • Group Toggle 逻辑简单
  • 参数节省

菜单结构

服装选择 (SubMenu)
├── 原皮 (Button) → taozhuang = 0
├── 露肩短裙 (Button) → taozhuang = 1
├── 休闲服 (Button) → taozhuang = 2
└── 开衫毛衣 (Button) → taozhuang = 3
露肩短裙 (Button) → taozhuang = 1 ├── 休闲服 (Button) → taozhuang = 2 └── 开衫毛衣 (Button) → taozhuang = 3 ```### 状态机设计

┌──────────────────────────────────────────────┐
│              Outfit States                    │
│                                               │
│  yuanpi ─── taozhuang=0 ───→ 待机_yuanpi     │
│     ↑                              ↓          │
│     │                   taozhuang=0           │
│     │                              待机_yuanpi│
│     │                              ↓           │
│     │                   taozhuang=1           │
│     │  ←──────────────────┐  待机_mox        │
│     │                     │      ↓             │
│     │          taozhuang=2│      待机_xiuxian │
│     └─── taozhuang=2 ────────┘      ↑           │
│                                   │           │
│                          taozhuang=1 ←────────┘
└──────────────────────────────────────────────┘

切换逻辑

用户点击 "休闲服"
Expression Menu 发送 taozhuang = 2
Animator 检测到 taozhuang == 2
Transition 从当前状态 → xiuxian 状态
播放 xiuxian 动画(换装动画 + Dissolve)

方案B:独立 Bool(适合配件)

参数定义

OutfitA (Bool) // 套装A 开关
OutfitB (Bool) // 套装B 开关
OutfitC (Bool) // 套装C 开关

适用场景

  • 各套装相互独立
  • 可以同时穿多套
  • 适合:饰品、发型、配件

菜单结构

发型选择 (SubMenu)
├── 短发 (Toggle) → Hair_A
├── 长发 (Toggle) → Hair_B
└── 双马尾 (Toggle) → Hair_C

方案C:BlendTree(动画混合)

适用场景

  • 需要平滑过渡的换装
  • 例如:胸部大小、胖瘦调整

参数定义

BodyShape (Float) // 0.0 ~ 1.0
(动画混合)

适用场景

  • 需要平滑过渡的换装
  • 例如:胸部大小、胖瘦调整

参数定义

BodyShape (Float) // 0.0 ~ 1.0
```### BlendTree 配置
BlendTree: BodyShape ├── child 0: Skinny (weight=0.0) ├── child 1: Normal (weight=0.5) └── child 2: Chubby (weight=1.0)
## 穿透模式设计

### 方案1:独立 Bool

```csharp
Bra (Bool)      // 内衣开关
Shorts (Bool)   // 内裤开关

// 穿透 = Bra=false + Shorts=false

方案2:整合 Int(节省参数)

// 用 3 个值表示所有组合
ClothingMode (Int)
  // 0 = 完整套装
  // 1 = 仅内衣(内裤穿透)
  // 2 = 仅内衣+内裤(外衣穿透)
  // 3 = 全穿透

方案3:分组 Int

TopMode (Int)     // 上装
  // 0 = 外衣 + 内衣
  // 1 = 仅内衣
  // 2 = 穿透

BottomMode (Int)   // 下装
  // 0 = 外裤 + 内裤
  // 1 = 仅内裤
  // 2 = 穿透

换装动画要点

Dissolve 过渡

每套服装切换都应有 Dissolve 动画:

切换 yuanpi → mox:
1. yuanpi Dissolve Out (0.3s)
2. mox Dissolve In (0.3s)

动画时长

  • Dissolve 动画:0.3 ~ 0.5 秒
  • 太短显得突兀
  • 太长影响体验

V3 实现参考

[!NOTE] V3 实现参考 Cazalis_FX_Modified_V3.controller,Layer 18-21 对应 4 套衣服,参数统一为 taozhuang。 具体溶解动画配置请参考 [[dissolve-transition-system-cazalis]]。

资产组织

目录结构

Assets/
└── MyAvatar/
    ├── Prefabs/
    │   └── MyAvatar.prefab
    ├── Models/
    │   ├── Outfit_A/
    │   │   ├── mesh.fbx
    │   │   └── materials/
    │   ├── Outfit_B/
    │   └── Outfit_C/
    ├── Animations/
    │   ├── Outfit_A_Change.anim
    │   ├── Outfit_B_Change.anim
    │   └── Dissolve.controller
    └── Scripts/

Modular Avatar 合并

使用 Modular Avatar 合并多套服装:

MyAvatar (Root)
├── Body (本素体)
├── Outfit_A (Modular Avatar Merge)
├── Outfit_B (Modular Avatar Merge)
└── Outfit_C (Modular Avatar Merge)
A (Modular Avatar Merge) ├── Outfit_B (Modular Avatar Merge) └── Outfit_C (Modular Avatar Merge) ```## 相关资源