跳转至

name: cazalis-dissolve-system-v3 description: Cazalis zigai 7套衣服溶解换衣系统的最终工作版本(V3 FX Controller),含完整的4状态循环架构、clip对应关系、wd配置、Shorts/Bra/Foot_Heel规则、多Avatar架构、以及部署验证要点 category: vrchat


Cazalis 溶解换衣系统 V3(最终版)

7套衣服一览

# 名称 taozhuang值 Layer
0 原皮 0 18
1 露肩短裙 1 19
2 休闲服 2 20
3 开衫毛衣 3 21
4 娃花 4 22
5 Blanchir 5 25
6 HonmeiKnit(01_Black) 6 27

FX Controller 文件

  • 文件: Cazalis_FX_Modified_V3.controller
  • 路径: Assets/ALCOM/project/Cazalis/Assets/Cazalis/Animation/FX/Cazalis_FX_Modified_V3.controller
  • 祖版: 从 Cazalis_FX.controller(原版)复制并修改

Layer 结构

Index 名称 来源 类型 wd
0-12 (原版手势/眨眼/表情/蝴蝶等) 原版 - -
13 Option 原版复制 Direct BlendTree, 4子项 true
14 Hair_Face_Options 原版复制 Direct BlendTree, 7子项 true
15 Face_Option 原版复制 5状态(Idle/Deformer/Adult/Loli/OFF) true
16 Cloth_Option 原版复制 Direct BlendTree, 6子项 true
17 Dress_ON 原版复制 2状态 true
18 4S_Origin 新建 4状态循环 A=true / BCD=false
19 4S_Lujian 新建 4状态循环 A=true / BCD=false
20 4S_Casual 新建 4状态循环 A=true / BCD=false
21 4S_Cardigan 新建 4状态循环 A=true / BCD=false
22 4S_Wahua 新建 4状态循环 A=true / BCD=false
25 4S_Blanchir 新建 4状态循环 A=OFF clip / BCD=false
26 4S_Underwear 新建 2状态(Hide/ShowShorts) Override, weight=1.0
=OFF clip / BCD=false
26 4S_Underwear 新建 2状态(Hide/ShowShorts) Override, weight=1.0
A_Closed →(taozhuang==val)→ B_Appearing →(ON播完)→ C_Opened →(taozhuang!=val)→ D_Disappearing →(OFF播完)→ A_Closed
                                                                                        ↓(打断保护)
                                                                                        A_Closed
- A_Closed 的 writeDefaultValues = true(Hide clip 恒定值,归零安全)
- B/C/D 的 writeDefaultValues = false
- 核心参数: taozhuang (Int)
- Transition Duration: 1.1秒(2026-05-28 从1.2s改为1.1s,5套统一)

Clip 对应关系

衣服 ON clip OFF clip Hide clip 文件修改时间
18 原皮 yuanpi_ON.anim yuanpi_OFF.anim yuanpi_Hide.anim 05-12
19 露肩短裙 mox_ON.anim mox_OFF.anim mox_Hide.anim 05-13/14
20 休闲服 xiuxian_ON.anim xiuxian_OFF.anim xiuxian_Hide.anim 05-13
21 开衫毛衣 ksmy_ON.anim ksmy_OFF.anim ksmy_Hide.anim 05-13
22 娃花 wahua_ON.anim wahua_OFF.anim wahua_Hide.anim -
25 Blanchir blanchir_ON.anim blanchir_OFF.anim blanchir_Hide.anim 05-27
26 内衣控制 Underwear_ShowShorts.anim Underwear_Hide.anim - 05-28
  • 所有 ON/OFF clip 是 1帧固定值(ON设z=-0.5, OFF设z=1.7)+ m_IsActive 控制
  • 溶解效果由 Transition Duration 1秒 + Unity 动画插值产生 是 1帧固定值(ON设z=-0.5, OFF设z=1.7)+ m_IsActive 控制
  • 溶解效果由 Transition Duration 1秒 + Unity 动画插值产生## ⚠️ 实际 wd 配置(与理论不同)

实测发现:现有5套衣服的4S层 A_Closed 实际使用 OFF clip + wd=false(不是理论推荐的 Hide clip + wd=true)。 - 这与 skill 中的理论推荐(A=Hide+wd=true)不同 - Blanchir 新层按照现有4套的实际做法配置(A=OFF clip + wd=false) - 原因:现有4套动画和层的配置已经在 VRChat 中验证正常工作,新层应与现有保持一致

Blanchir 套装详情(2026-05-27 新增)

  • SMR 路径: Blanchir_Cazalis/Blanchir_inner, Blanchir_Cazalis/Blanchir_skirt, Blanchir_Cazalis/Blanchir_top
  • 材质: Assets/Cazalis/Qukumu/Blanchir/Cazalis/Data/blanchir Cazalis.mat
  • 材质配置: _DissolveParams=(2,0,1.7,0), _DissolvePos=(0,1,0,0), _DissolveNoiseMask=Cazalis_Reflection_Noise, _DissolveNoiseStrength=0.3, _DissolveColor=(0.22,0.48,0.91,1)
  • 动画目录: Assets/Cazalis/Animation/FX/(Blanchir_ON.anim/Blanchir_OFF.anim/Blanchir_Hide.anim,大写B)
  • taozhuang 值: 5
  • 菜单名: 绑带上衣(原英文名 Blanchir 已改名)
  • 菜单图标: Assets/Auto_Iron/blanchir.png (GUID=5db9f00dca0ac3240bf9abf2ffac4837, 512×512)
  • Boots ShapeChanger: 已补全 ModularAvatarShapeChanger(3个blendshape: Shrink_Toe/Shrink_Foot/Shrink_Ankle=100, refPath=Body_Base, ChangeType=Set) apeChanger(3个blendshape: Shrink_Toe/Shrink_Foot/Shrink_Ankle=100, refPath=Body_Base, ChangeType=Set)## ⚠️ PhysBone 飘动失灵 — 常见原因

衣服切换后 PhysBone 不飘动的排查清单:

原因 1:ON clip 缺少 PB/m_IsActive = 1 曲线 - Cloud 组衣服的 PhysBone 全部挂在 Cloud/PB/ 子节点下(Outer_Waist_*Outer_Ribbon*Neck_RibbonBoots_Ribbon*Upper_leg_Ribbon* 等) - OFF clip 会设 Cloud/PB/m_IsActive = 0 - 如果 ON clip 没有对应设 Cloud/PB/m_IsActive = 1,切换回来后 PB 节点是关的,物理不工作 - 同理检查 Cloud/Armature/m_IsActiveCloud/Collider/m_IsActive - 已验证:yuanpi_ON.animxiuxian_ON.anim 容易遗漏这条曲线

原因 2:wd=true 的旧 Layer 干扰 - 原版 Layer 13 Dress_ON 是 wd=true,如果它和 4S 层同时输出,可能覆盖衣服状态 - 检查所有 wd=true 的 Layer 是否也控制了你衣服的 GameObject

原因 3:isAnimated 参数没设 - 每个衣服集的 PhysBone isAnimated = False(默认值)— 如果不需要动画控制器控制 PhysBone 参数,保持 false 即可

修复方法:在 Unity 中打开缺失曲线的 ON clip,添加 Cloud/PBm_IsActive = true 的关键帧。

🔴 Shorts/Bra 显隐规则(2026-05-28 重构)

核心架构变更:Shorts/Bra 不再由各衣服的 ON/OFF clip 控制,改为由 Layer 26 (4S_Underwear) 统一管理,消除多层 Override 冲突。

多层 Override 冲突问题(已解决)

根因:5个衣服层都是 Override 模式,每个层的 OFF clip 都写了 Shorts/Bra 的隐藏值。当原皮/抹胸层用 ON clip 显示 Shorts 时,其他未激活层的 OFF clip 在后面覆盖了 ON clip 的值,导致 Shorts 不可见。

修复:从所有10个 ON/OFF clip 移除 Shorts/Bra 曲线(40条),新建专用 4S_Underwear 层统一控制。 ON clip 的值,导致 Shorts 不可见。

修复:从所有10个 ON/OFF clip 移除 Shorts/Bra 曲线(40条),新建专用 4S_Underwear 层统一控制。### Layer 26 (4S_Underwear) 架构

Hide (default) ←→ ShowShorts
- Hide 状态:Shorts m_IsActive=0 + z=1.7, Bra m_IsActive=0 + z=1.7 - ShowShorts 状态:Shorts m_IsActive=1 + z=-0.5, Bra m_IsActive=0 + z=1.7 - 过渡条件: - Hide → ShowShorts: taozhuang == 0 (原皮) / taozhuang == 1 (抹胸) / taozhuang == 5 (绑带上衣) - ShowShorts → Hide: taozhuang == 2 (休闲) / taozhuang == 3 (开衫) / taozhuang == 4 (全脱) - blendingMode: Override - defaultWeight: 1.0(⚠️ 创建时默认为0,必须手动设为1.0) - 过渡时间: 1.1s(与衣服溶解同步)

显隐对照表

# 衣服 taozhuang Shorts Bra Layer 26 状态
0 原皮 0 ShowShorts
1 露肩短裙 1 ShowShorts
2 休闲服 2 Hide
3 开衫毛衣 3 Hide
4 全脱 4 Hide
5 绑带上衣 5 ShowShorts

动画剪辑

  • Underwear_Hide.anim — Shorts a=0 z=1.7, Bra a=0 z=1.7
  • Underwear_ShowShorts.anim — Shorts a=1 z=-0.5, Bra a=0 z=1.7

🔴 Foot_Heel Blendshape 规则(2026-05-27 确认)

Foot_Heel blendshape 值由各衣服 ON 动画设定:

# 衣服 Foot_Heel值 含义
0 原皮 100 高跟鞋
1 露肩短裙 100 高跟鞋
2 休闲服 0 平底鞋
3 开衫毛衣 100 高跟鞋
4 娃花 100 高跟鞋
5 Blanchir 100 高跟鞋

🔴 材质 Alpha 蒙版陷阱(2026-05-27 发现)

Shorts 材质的 Alpha 蒙版模式必须设为"无"(None),绝不能设为"替换"(Replace)!

  • 设为"替换" → Shorts 完全透明不可见
  • 设为"无" → 正常显示
  • 此规则可能适用于其他使用 lilToon 的半透明衣物材质,遇到透明度异常时优先检查此设置 eplace)!**

  • 设为"替换" → Shorts 完全透明不可见

  • 设为"无" → 正常显示
  • 此规则可能适用于其他使用 lilToon 的半透明衣物材质,遇到透明度异常时优先检查此设置## Blanchir 飘带骨骼与材质(2026-05-27 新增)

  • 飘带骨骼:从 Chic 复制到 Blanchir Armature.1,共 8个根骨骼 + 28个 PB 节点

  • Boots 材质:已独立复制到 Blanchir 专属目录(不共用 Chic 原版材质)
  • Chic 原版材质:已还原,未被 Blanchir 修改污染

已解决问题(2026-05-28)

  1. 露肩短裙/原皮 Shorts 不显示 — 根因:多层Override冲突,多个4S层的OFF clip同时写Shorts/Bra值,后面的层覆盖前面。修复:移除各层ON/OFF clip中的Shorts/Bra曲线,新建Layer 26(4S_Underwear)统一管理
  2. Layer 26 weight=0 不生效 — 新建Layer时defaultWeight默认为0,通过创建新AnimatorControllerLayer副本设defaultWeight=1.0替换原层解决 weight=0 不生效**~~ — 新建Layer时defaultWeight默认为0,通过创建新AnimatorControllerLayer副本设defaultWeight=1.0替换原层解决## 🔴 L25 4S_Blanchir StateMachine 丢失问题(2026-05-28 重点记录)

症状:打开 Unity 后 L25 4S_Blanchir 的 stateMachine 变为 NULL,控制台报 Statemachine for layer '4S_Blanchir' is missing + Animator Controller is not valid

根因:AnimatorControllerLayer 是 struct,ctrl.layers[i] 返回的是副本。通过 C# API 修改层后,如果 SM 及其子对象(states、transitions)没有作为 sub-asset 注册到 .controller 文件,Unity 重新加载时会丢失引用。

修复方法(已验证成功持久化): 1. 创建 AnimatorStateMachine → 用 sm.AddState() 创建状态 → 设置 transitions 2. 创建新的 AnimatorControllerLayer struct,设置 stateMachine = sm, defaultWeight = 1f, blendingMode = Override 3. 关键:替换回 layers 数组:layers[25] = newLayer; ctrl.layers = layers; 4. EditorUtility.SetDirty(ctrl); AssetDatabase.SaveAssets(); 5. 验证持久化AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate); 后重新 LoadAssetAtPath 检查 SM 是否仍非 NULL 6. 检查 sub-assets:LoadAllAssetRepresentationsAtPath 应包含 4S_Blanchir_SM

⚠️⚠️ CRITICAL WARNING:此问题一定会再次发生!每次打开 Unity 或 reload domain 后都必须第一时间验证 L25 SM 是否存在。如果再次丢失,立即用上述方法重建。不验证会导致 FX Controller 完全失效,全部动画报错。 Unity 或 reload domain 后都必须第一时间验证 L25 SM 是否存在。如果再次丢失,立即用上述方法重建。不验证会导致 FX Controller 完全失效,全部动画报错。快速重建代码模板

var ctrl = AssetDatabase.LoadAssetAtPath<AnimatorController>("Assets/Cazalis/Animation/Animator/Cazalis_FX_Modified_V3.controller");
var sm = new AnimatorStateMachine(); sm.name = "4S_Blanchir_SM";
var aClosed = sm.AddState("A_Closed", new Vector3(200,0,0)); aClosed.motion = OFFclip; aClosed.writeDefaultValues = false;
var bAppearing = sm.AddState("B_Appearing", new Vector3(400,80,0)); bAppearing.motion = ONclip; bAppearing.writeDefaultValues = false;
var cOpened = sm.AddState("C_Opened", new Vector3(600,0,0)); cOpened.motion = ONclip; cOpened.writeDefaultValues = false;
var dDisappearing = sm.AddState("D_Disappearing", new Vector3(400,-80,0)); dDisappearing.motion = Hideclip; dDisappearing.writeDefaultValues = false;
sm.defaultState = aClosed;
// Transitions: A→B(taozhuang==5,1.1s), B→C(auto), B→A(taozhuang!=5), C→D(taozhuang!=5,1.1s), D→A(auto), D→C(taozhuang==5)
var layers = ctrl.layers; layers[25] = newLayer; ctrl.layers = layers;
(auto), D→C(taozhuang==5) var layers = ctrl.layers; layers[25] = newLayer; ctrl.layers = layers; ```## 未解决问题(2026-05-28)

  1. Blanchir Boots 脚部穿模 — 脚部 clipping 问题,可能需要调整 Boots mesh 或材质设置
  2. L25 4S_Blanchir SM 可能再次丢失 — 每次打开 Unity 需验证,如丢失按上述模板重建 脚部 clipping 问题,可能需要调整 Boots mesh 或材质设置
  3. L25 4S_Blanchir SM 可能再次丢失 — 每次打开 Unity 需验证,如丢失按上述模板重建## 关键陷阱
  4. VRCAvatarDescriptor vs Animator 组件不同步 — Avatar 的 FX 动画控制器是在 VRCAvatarDescriptor 上指定的。修改 Animator 组件上的控制器不生效。必须确认 VRCAvatarDescriptor 面板里的 FX Layer 指向正确版本。
  5. layers[li] 返回副本 — 通过 C# API 修改 ctrl.layers[li].stateMachine 不生效,必须直接操作子资产(Sub-StateMachine objects)。
  6. A_Closed 必须 wd=true + Hide clip — A_Closed 用 Hide clip(1帧恒定值 z=1.7, w=0.1, m_IsActive=0)+ wd=true,这样进入 A 时属性被正确归零。如果用 OFF clip + wd=false,从 D→A 过渡结束后 dissolve 参数可能残留中间值。
  7. Shorts/Bra OFF动画不控制显隐 — 已重构为 Layer 26 (4S_Underwear) 统一管理,各衣服ON/OFF clip不再包含Shorts/Bra曲线
  8. 材质Alpha蒙版"替换"导致透明 — lilToon材质的Alpha蒙版模式选"替换"会使对象完全透明不可见,必须选"无"。
  9. 材质复制原则 — 从其他服装复制部件,必须将材质复制到目标服装专属目录,绝对不能修改原服装原版材质,否则会影响原服装。
  10. 骨骼绑定原则 — 所有SkinnedMeshRenderer用到的骨骼必须存在于目标服装自己的Armature.1下,额外飘带/蝴蝶结骨骼必须完整复制过去,否则会导致null骨骼绑定,部件变形。
  11. 多层Override冲突 — 多个Override层同时写同一属性时,后面的层会覆盖前面的层的值。解决方案:将冲突属性提取到专用层统一管理,不在多个层中重复写入。
  12. 新建Layer的defaultWeight=0陷阱 — 通过C# API创建AnimatorControllerLayer时,defaultWeight默认为0,层不会生效。必须手动设为1.0。修复方法:创建新layer副本设defaultWeight=1,替换回layers数组。
  13. C# AddCondition需要3个参数AddCondition(mode, threshold, parameterName) 三参数,不能省略threshold。Unity 2022中AnimatorConditionMode枚举值:Equals=6, NotEqual=7(不是1/2)。
  14. 共享材质修改污染其他Avatar — 多Avatar共享FX Controller时,如果修改了某个Avatar的材质(如Shorts的_DissolveParams.z),会影响所有使用该材质的Avatar。必须先创建独立材质副本再修改,特别是溶解参数(z值)的变更。
  15. 精简Avatar必须保留taozhuang参数并设对默认值 — 共享FX Controller的换衣层(4S_HonmeiKnit等)依赖taozhuang参数。如果精简Params时删掉taozhuang,VRChat默认值=0,01_Black会被溶解隐藏。ZG_03 Controller的换衣层(4S_HonmeiKnit等)依赖taozhuang参数。如果精简Params时删掉taozhuang,VRChat默认值=0,01_Black会被溶解隐藏。ZG_03 Controller的换衣层(4S_HonmeiKnit等)依赖taozhuang参数。如果精简Params时删掉taozhuang,VRChat默认值=0,01_Black会被溶解隐藏。ZG_03必须保留taozhuang=default=6。
  16. obake nail类配件不需要菜单但必须保留在Avatar上 — 指甲等装饰性配件不参与换衣系统,没有菜单控件,但它们是Avatar外观的一部分,创建精简版时不应移除。
  17. 6套衣服实际含HonmeiKnit — taozhuang=6对应4S_HonmeiKnit层(01_Black套装),这是第6套衣服,之前的5套是0=原皮/1=露肩短裙/2=休闲服/3=开衫毛衣/5=Blanchir。4=娃花/4S_Wahua层存在但可能未使用。
  18. VRCExpressionParameters.Parameter字段 — 只有:name(String), valueType(ValueType), saved(Boolean), defaultValue(Single/float), networkSynced(Boolean)。没有localOnly字段。
  19. Instantiate后骨骼自动重绑 — 场景内Instantiate Avatar后,子对象的SkinnedMeshRenderer骨骼会自动指向新Avatar的Armature,不需要手动修复。 nstantiate后骨骼自动重绑** — 场景内Instantiate Avatar后,子对象的SkinnedMeshRenderer骨骼会自动指向新Avatar的Armature,不需要手动修复。## Avatar 信息
  20. 模型名: Cazalis zigai02
  21. Avatar 路径: Assets/Avatars/Cazalis zigai/Cazalis zigai02.prefab
  22. FX 控制器切换后可能需要 Refresh 才能看到效果

多 Avatar 架构(2026-06-02 确认)

项目内 3 个 Cazalis Avatar 共享 FX Controller,各自拥有独立 Params/Menu:

Avatar FX Controller ExpressionParameters ExpressionMenu 专属资产目录
ZG_01 共享 Cazalis_Parameter_ZG_01.asset Cazalis_Menu_ZG_01.asset Assets/Cazalis_ZG_01_Assets/
ZG_02 共享 Cazalis_Parameter_ZG_02.asset Cazalis_Menu_ZG_02.asset Assets/Cazalis_ZG_02_Assets/
ZG_03 共享 Cazalis_Parameter_ZG_03.asset Cazalis_Menu_ZG_03.asset Assets/Cazalis_ZG_03_Assets/
  • FX Controller 共享Assets/Cazalis/Animation/Animator/Cazalis_FX_Modified_V3.controller,所有换衣层仍存在,不使用的层因无对应服装对象而静默
  • Params/Menu 独立:每个 Avatar 有自己的参数和菜单副本,可独立精简 X_Modified_V3.controller`,所有换衣层仍存在,不使用的层因无对应服装对象而静默
  • Params/Menu 独立:每个 Avatar 有自己的参数和菜单副本,可独立精简### ZG_03 精简版 Avatar(2026-06-02 创建)
项目 ZG_02(原版) ZG_03(精简版)
服装 5套可切换 仅 01_Black(常驻,taozhuang=6)
子对象 22 18(含 obake nail)
参数 37个 / 93 bits 24个 / 73 bits
菜单 8项(含换衣+配饰) 6项(删换衣+配饰子菜单)
FX Controller 共享 共享
taozhuang default=6 default=6
Shorts材质 共享(动画控制 z=1.7) 独立副本(常驻显示 z=-0.5)

ZG_03 保留的子对象:01_Black, Armature, Body, Body_Base, Cloth_Under_Shorts, 8个头发, obake nail cazalis_Red, PlaneCollider, Anchor Target, Butterfly, GoGo Loco Beyond

ZG_03 删除的参数:Bra_ON, Dress_ON, DressSkirt_ON, Pumps_ON, Socks_ON, Origin/Lujian/Casual/Cardigan_ON, taozhuang(后加回,default=6), Wardrobe_Int1, WardrobeParts_0/1, Shorts_ON

ZG_03 删除的菜单项:换衣子菜单、配饰子菜单

Wiki 审查结果(2026-05-15)

  • VRChat 44篇文档中33篇无需修改,5篇轻微修正,1篇严重过时(dissolve-transition-system-cazalis.md需重写),2篇存档补充,3篇补充说明
  • dissolve-transition-system-cazalis.md 已更新为 V3 方案