title: NDMF 架构与冲突解决 (VRCFury/MA) description: 现代 VRChat 开发的基石:NDMF 构建管线、插件优先级与冲突安全机制
NDMF 架构与冲突解决 (VRCFury/MA)
现代 VRChat 开发已经告别了手动编辑 Animator 的时代。我们现在使用 NDMF (New Dynamic Modding Framework) 生态系统,其中 Modular Avatar (MA) 和 VRCFury 是两大支柱。
理解它们如何协同工作,是避免“装了插件菜单就坏了”的关键。
1. 构建管线顺序 (Pass Order)
NDMF 就像一位严谨的包工头,按顺序指挥各个插件干活。
- Modular Avatar (MA):
- 它注册在
Transforming阶段的早期。 - 作用:负责打地基。处理基础动画层绑定、菜单参数分配、物理骨骼路由等。
- 它注册在
- VRCFury (VF):
- 它声明自己必须在 MA 之后运行,接管
Transforming晚期和Optimizing阶段。 - 作用:负责装修。注入高级逻辑(如变身、接触互动),并处理冲突解决。
- 它声明自己必须在 MA 之后运行,接管
✅ 最佳实践:先放 MA 组件定结构,再放 VRCFury 组件加逻辑。永远不要手动修改最终的 AnimatorController,因为 NDMF 会在构建时覆盖它。
2. 冲突解决机制 (Conflict Resolution)
当 MA 和 VF 都想用同一个参数(比如 IsToggled)时会发生什么?
参数注册表 (Parameter Registry)
NDMF 维护一个全局的“参数户籍本”。 * 情况 A:名称相同,类型相同。NDMF 直接把现成的参数引用给 VF,大家共享一个开关。 * 情况 B:名称相同,类型不同(如 Bool vs Float)。NDMF 会直接报错并停止构建,强制你改名。 * 情况 C:名称不同,功能冲突。NDMF 会尝试合并状态机。
VRCFury 内部优先级 (Priority 0-100)
如果同一个物体上有多个 VFC 组件(比如一个控制衣服,一个控制头发): * Priority 高的组件后执行,它的状态会覆盖低的组件。 * 这保证了你可以精确控制谁说了算。
3. 幽灵控制器 (Ghost Controllers)
这是 VRCFury 不破坏主状态机的秘密武器。
* 原理:当你添加 VFContact 或 VFHenshin 时,VFC 会在内存中创建一个完全独立的 Animator Controller(幽灵控制器)。
* 合并:通过 NDMF 的 AnimatorControllerMerger API,这个幽灵控制器被安全地作为新层 (New Layer) 注入到最终的 FX 控制器中。
* 优势:
* 隔离性:VFC 的复杂逻辑(如 50 个状态的变身)完全不会挤占主控制器的空间。
* 安全性:即使 VFC 逻辑崩溃,你的基础走路和换装功能依然完好。
优势:
* 隔离性:VFC 的复杂逻辑(如 50 个状态的变身)完全不会挤占主控制器的空间。
* 安全性*:即使 VFC 逻辑崩溃,你的基础走路和换装功能依然完好。## 4. 稳定性红线
- Hands-Off Animator:构建前看一眼 Animator 没问题,但构建后生成的控制器是神圣不可侵犯的。
- 参数卫生:除非必须共享,否则让 VRCFury 自动生成参数。如果需要共享,必须在 MA 里先定义好。
- Pre-Flight 测试:在上传前,务必使用 VRCFury 的 Test Build 窗口。它会在本地模拟 NDMF 流程,高亮显示所有参数冲突。