官方文档:如何使用 BoneSpring – Magica Soft
Magica Cloth 中的三种解算对象
Mesh Cloth(网格布)
- 粒子来源:SkinnedMeshRenderer 的顶点。要刷 Move / Fixed / Invalid。
- 效果:直接变形网格表面,细节最丰富;可开自碰撞;适合片状/卡面。
- 成本:三者里最高(粒子=顶点数,需用 Reduction 降采样)。
- 适用:披风、裙摆、围巾、头发卡面、软组织(胸部、肚皮等)、飘带整片。
- 坑:没刷好固定环会“滑/拉长”,要配 Stretch/Tether + 固定环 + 碰撞体。
Bone Cloth(骨骼布)
- 粒子来源:骨骼/Transform 链(以骨链为粒子并加约束)。
- 效果:驱动骨链再由蒙皮带动网格,稳定、省算力;可做链条的长度/弯曲约束与碰撞。
- 成本:中,远低于 Mesh Cloth。
- 适用:马尾、长辫、尾巴、绳子/挂带、衣摆骨骼条、旗子骨条等细长物。
- 坑:不是片面解算;想要“整片布”的皱折感就不如 Mesh Cloth 真实。
Bone Spring(骨骼弹簧)
- 粒子来源:单个或少量骨骼的弹簧式抖动(不构网格/链约束,配置最少)。
- 效果:快速给骨头一点弹性/回弹;可配简单限角/惯性,成本最低。
- 成本:三者里最低。
- 适用:小幅“抖动”与点缀:胸部骨/耳朵/额前呆毛/小饰物根骨、衣角小骨等。
- 坑:不适合长链或大片;形状控制与自碰撞能力最弱(更偏“微抖动器”)。
流程
- 0. 检查工作:模型启用Read/write

原因
当 Read/Write 打勾时,Unity 会在内存里同时保留两份 Mesh 数据:
- GPU 端的数据(用来渲染模型)
- CPU 端的数据(脚本或运行时可以访问和修改的网格顶点/UV/法线等)
这样脚本就能调用 mesh.vertices、mesh.normals、mesh.RecalculateBounds() 等 API 来修改网格
对于Cloth / MagicaCloth / 动态布料系统(需要访问并修改顶点位置)。变形动画 / Procedural Mesh(代码生成或实时修改 Mesh)。GPU 烘焙 / 特殊计算(比如在脚本里读顶点数据做碰撞检测)都需要启用
如果模型只作为静态渲染对象(不会在运行时改动顶点),可以关掉。关掉后 Unity 只在 GPU 上
Magiaca Cloth – Mesh Cloth
- 1.确保模型有骨骼节点结构(如果用MMDTools导出FBX文件的话,应该能看到自动配置好的日文描述的空游戏物体的空游戏物体),如果没有可以手动创建需要添加碰撞体的骨骼节点,即在对应位置创建空游戏物体
- 2.如果有Mesh节点结构,直接在Magica cloth的Source Render中拖入不同的结构,在用画笔将全部节点Fill 为Move,再选择不需要受Mesh影响的节点为Fixed。
- 如果只有唯一的Mesh节点,则在每个Magica Cloth的Source Render中拖入唯一的Mesh(通常将PMX转换为fbx时会出现这种结构),需要在使用画笔前将不需要的Mesh部分涂成Invalid,后面步骤同2,但在实际中很难从全部Mesh中选取 – 不推荐
- How To Separate A Mesh Into Two Objects | Blender Tutorials
根据这个教程,在Blender中,按tab(编辑模式) – P(Seperate) – By material ,这样就能将各个身体部位按照材质分为很多个Mesh的子物体这样就方便用画笔填涂了
- How To Separate A Mesh Into Two Objects | Blender Tutorials
- 如果只有唯一的Mesh节点,则在每个Magica Cloth的Source Render中拖入唯一的Mesh(通常将PMX转换为fbx时会出现这种结构),需要在使用画笔前将不需要的Mesh部分涂成Invalid,后面步骤同2,但在实际中很难从全部Mesh中选取 – 不推荐
- 3.添加碰撞体:此时需要为各个Magica cloth设置需要考虑的碰撞体列表,注意碰撞体不能设置为Mesh游戏物体的子物体,而应将碰撞体设置为在第一步添加的骨骼节点的子物体,建议开启unity的网络视图
理由
SkinnedMeshRenderer(Mesh)本身只是显示网格的容器,它的 Transform 大多数情况下不会随局部动画(点头、挥手)而变化,只会随整个角色根节点一起移动/旋转。
网格顶点的形变是通过「蒙皮(Skinning)」计算出来的:骨骼矩阵 * 顶点绑定权重 → 得到最终顶点位置。但 Mesh 的 Transform 不会更新
所以:把 Collider 放在 Mesh 的子物体 下,它只跟 Mesh 的 Transform 走,而 Mesh 的 Transform 没有局部摆动信息 → 碰撞体不会动
骨骼节点的 Transform 才有“动画数据”,Animator 在播放待机/攻击动画时,会不断修改 Head、Neck、Spine 这些骨骼节点的本地 Transform。你把 Collider 挂在这些骨骼节点下面,它就会随骨骼的 Transform 更新 → 自然就跟着头点头、肩膀扭动而动。
5.按照物体特性调整参数
Magica Cloth – Bone spring

此处不是拖入Mesh的游戏子物体,而是拖入导出FBX时日文生成的日文名称的空游戏物体节点,对应着人物的各个部分节点,注意需要注册作为层级起点的变换。
然后用画笔选择Fixed和Move节点,注意一定要有Fixed的节点,否则不会有效果。详情可查看文档

参数介绍
2. Force:整体受力与阻尼
Force 是控制整体物理运动的区域,主要影响“动起来之后停得快不快”。官方文档里 Damping 被解释为空气阻力,数值越高,顶点运动越慢;Stabilization Time 用于初始化或重置时的稳定,避免一开始和碰撞体重叠后被猛烈弹开。
| 参数 | 作用 | 调大后 | 调小后 |
|---|---|---|---|
| Damping | 阻尼 / 空气阻力 | 更快停下,更稳 | 更容易晃、更弹 |
| Stabilization Time | 初始化稳定时间 | 开始时更不容易炸开 | 启动更直接,但可能突然弹开 |
3. Spring:弹簧效果
Spring 控制“这个点/骨骼可以离原始位置多远,以及回弹力度多大”。官方 BoneSpring 文档里说明,Spring Power 是弹簧强度,Limit Distance 是从原点可移动的最大范围,Normal Limit Ratio 可以进一步限制法线方向上的移动范围。
| 参数 | 作用 | 调大后 | 调小后 |
|---|---|---|---|
| Spring Power | 弹簧回拉力度 | 抖动次数越少,幅度也越小 | 更软、更自由 |
| Limit Distance | 最大偏移距离 | 可晃动范围更大 | 晃动范围更小 |
| Normal Limit Ratio | 法线方向移动比例 | 更接近球形范围 | 更扁、更受限 |
| Spring Noise | 弹簧随机差异 | 不同点晃动不同步 | 更整齐、更统一 |
4. Angle Restoration:角度恢复 / 姿态回正
这是非常重要的一组。官方文档说 Angle Restoration 会让边相对于基准线恢复到原始角度,是控制运动的大核心参数;Stiffness 越高,恢复越快;Velocity Attenuation 是恢复时的速度衰减,低了会更弹,高了会更柔和。
| 参数 | 作用 | 调大后 | 调小后 |
|---|---|---|---|
| Stiffness | 回正刚度 | 更快回到原姿态,更硬 | 更软,恢复更慢 |
| Velocity Attenuation | 回正时速度衰减 | 更稳、更不弹 | 更弹、更有惯性 |
5. Angle Limit:角度限制
Angle Limit 是限制骨骼 / 顶点偏离原始角度的最大范围。官方说明它用于限制边从原始姿势弯曲的角度,例如刘海、裙子等不希望弯得太夸张的部位。
| 参数 | 作用 |
|---|---|
| Angle Limit | 限制最大弯曲角度 |
| Limit Angle | 最大允许弯曲角 |
| Stiffness | 碰到限制后拉回的力度 |
6. Inertia:惯性
Inertia 控制角色移动、旋转、动画对布料/骨骼的影响。官方文档把惯性分成 Anchor、World、Local 三类:World Inertia 主要对应角色整体在世界中的移动,Local Inertia 主要对应角色自身动画带来的局部运动。
- 6.1 Anchor
| 参数 | 作用 |
|---|---|
| Anchor | 指定一个参考物体,用来排除某些移动带来的惯性 |
一般角色站在普通场景里可以保持:
Anchor = None
如果角色站在移动平台、电梯、车上,才更需要 Anchor。
- 6.2 World Inertia:世界惯性
| 参数 | 作用 | 调大后 |
|---|---|---|
| World Inertia | 角色整体移动对物理的影响 让布料对“整个人物在世界里的位移/转向”产生滞后 | 更受角色移动影响 越大越“跟在身后拖尾”,越小越跟得紧。 |
| World Inertia Smoothing | 平滑世界惯性 | 减少突然启动/停止导致的抖动 |
| World Movement Speed Limit | 限制世界移动速度影响 | 防止高速移动时物理炸开 |
| World Rotation Speed Limit | 限制世界旋转速度影响 | 防止快速转身时乱甩 |
- 6.3 Teleport
- None = 不检测瞬移
- Reset = 瞬移后重置物理
- Keep = 瞬移后保留当前物理状态
| 参数 | 作用 |
|---|---|
| Teleport Mode | 检测到瞬移时怎么处理模拟 |
| Teleport Distance | 一帧移动超过多少算瞬移 |
| Teleport Rotation | 一帧旋转超过多少算瞬移 |
6.4 Local Inertia:本地惯性
| 参数 | 作用 |
|---|---|
| Local Inertia | 角色自身动画对物理的影响 |
| Local Movement Speed Limit | 限制本地移动速度影响 |
| Local Rotation Speed Limit | 限制本地旋转速度影响 |
| Local Depth Inertia | 根据深度减少靠近起点部分的本地惯性 |
| Centrifugal Acceleration | 离心力增强 |
| Particle Speed Limit | 限制单个粒子最大速度 |
8. Culling:视野外是否停止模拟
Culling 是性能优化用的。官方文档说明,Culling 可以在角色不被摄像机绘制,或者离摄像机太远时停止模拟,从而提升性能。
| 模式 | 作用 |
|---|---|
| Off | 永远模拟 |
| Reset | 不可见时停止,再出现时重置 |
| Keep / Pause | 不可见时暂停,再出现时继续 |
单角色演示可以 Off。
项目里很多角色时建议开 Culling,不然性能会浪费在镜头外角色身上。
9. Normal Alignment:法线对齐
你上一张图里有 Normal Alignment。这个会影响 Spring、Backstop 等参数使用的法线方向。官方文档说明,Normal Alignment 可以不调整,也可以从包围盒中心或某个 Transform 做放射状调整,实际 Transform 或 Mesh 不会被改,只是调整代理网格的法线方向。
| 模式 | 作用 |
|---|---|
| None | 不调整法线 |
| Bounding Box Center | 从包围盒中心向外放射 |
| Transform | 以指定 Transform 为中心向外放射 |
胸部、裙子、头发如果出现“运动方向怪”“限制方向不对”,可以检查这个。

Culling
背面剔除。开=只刷面向相机的面;关=相机背面的面也可能被刷到
Paint Attribute(Move / Fixed / Invalid)
- Move:参与布料解算的顶点(会动)。
- Fixed:锚点,只跟随骨骼(不动)。
- Invalid:完全不参与布料(省性能、相当于“从布料网里剔除”)
初始值
胸部
Preset:SoftSpring 或 MiddleSpring
Damping:0.2 ~ 0.35
Spring Power:0.02 ~ 0.06
Limit Distance:0.025 ~ 0.05
Normal Limit Ratio:0.6 ~ 1
Spring Noise:0
Angle Restoration:开启
Stiffness:0.2 ~ 0.45
Velocity Attenuation:0.75 ~ 0.9
Angle Limit:可以先关
World Inertia:0.4 ~ 0.8
World Movement Speed Limit:1 ~ 2
Local Inertia:0.5 ~ 1
Particle Speed Limit:2 ~ 4
Collider Radius:0.015 ~ 0.03
Collision Bones:需要添加相关碰撞骨骼
最重要的三个参数是:
- Limit Distance:控制能晃多远
- Spring Power:控制回弹强不强
- Velocity Attenuation:控制弹不弹





