布料 (Cloth) 组件与带蒙皮的网格渲染器 (Skinned Mesh Renderer) 协同工作,从而提供基于物理的面料模拟解决方案。此组件是专为角色服装设计的,仅对蒙皮网格有效。如果向非蒙皮网格中添加 Cloth 组件,则 Unity 会删除非蒙皮网格并添加蒙皮网格。
要将 Cloth 组件附加到蒙皮网格,请在 Editor 中选择游戏对象,在 Inspector 窗口中单击 Add Component 按钮,然后选择 Physics > Cloth。Inspector 中将显示该组件。
属性 | 功能 |
---|---|
Stretching Stiffness | 布料的拉伸刚度。 |
Bending Stiffness | 布料的弯曲刚度。 |
Use Tethers | 施加约束以帮助防止移动的布料粒子离开固定粒子的距离太远。此属性有助于减少过度拉伸。 |
Use Gravity | 是否应该对布料施加重力加速度? |
Damping | 运动阻尼系数。 |
External Acceleration | 施加在布料上的恒定外部加速度。 |
Random Acceleration | 施加在布料上的随机外部加速度。 |
World Velocity Scale | 角色多大程度的世界空间移动会影响布料顶点。 |
World Acceleration Scale | 角色多大的世界空间加速度会影响布料顶点。 |
Friction | 布料与角色碰撞时的摩擦力。 |
Collision Mass Scale | 碰撞粒子的质量增加量。 |
Use Continuous Collision | 启用连续碰撞来提高碰撞稳定性。 |
Use Virtual Particles | 每个三角形添加一个虚拟粒子,从而提高碰撞稳定性。 |
Solver Frequency | 解算器每秒迭代次数。 |
Sleep Threshold | 布料的睡眠阈值。 |
Capsule Colliders | 应与此 Cloth 实例碰撞的 CapsuleCollider 的数组。 |
Sphere Colliders | 应与此 Cloth 实例碰撞的 ClothSphereColliderPairs 的数组。 |
布料不响应场景中的任何碰撞体,也不会将力反射回世界。添加 Cloth 组件后,该组件完全不会响应和影响任何其他实体。因此在手动将碰撞体从世界添加到 Cloth 组件之前,布料和世界无法识别或看到彼此。即使执行了此操作,模拟仍是单向的:布料可以响应实体,但不会反向施力。
此外,只能对布料使用三种类型的碰撞体:球体、胶囊体以及使用两个球形碰撞体构造而成的圆锥胶囊碰撞体。之所以存在这么多限制是为了帮助提高性能。
您可以将约束应用于布料的特定顶点,以增加或减少这些顶点的移动自由度。
在 Inspector 中,选择 Cloth 组件中的 __Edit cloth constraints__(左上角的按钮)。启用该工具后,在 Scene 视图中,网格的所有顶点上都将出现小球体。这些小球体代表可以应用约束的布料粒子。Scene 视图右下角还会显示 Cloth Constraints 工具窗口。
对于每个布料粒子,您可以设置和显示两种约束: * Max Distance – 布料粒子可从顶点位置行进的最大距离。 * Surface Penetration – 布料粒子可穿透网格的深度。
根据当前选择的约束的类型,粒子的颜色表示该粒子的约束在布料内的相对值。
属性 | 功能 | |
---|---|---|
Visualization | 选择要显示的约束类型和粒子。 | |
Max Distance | 仅显示布料粒子的 Max Distance 值。 | |
Surface Penetration | 仅显示布料粒子的 Surface Penetration 值。 | |
Manipulate Backfaces | 启用此选项可以可视化和操控可能隐藏在布料当前朝向部分后面的粒子。 | |
[ 色谱 ] | 根据当前在整块布料中应用的最小值和最大值,为上述选定的约束类型提供粒子颜色和约束值之间的对应关系。黑色始终表示粒子没有约束。 | |
Constraint Size | 代表布料粒子的球体的显示大小。在方便时可以调整此值以便简化约束版本。这个属性对约束本身没有任何影响。 |
您可以使用 3 种不同的模式来编辑布料约束值。
模式 | 描述 |
---|---|
Select | 将固定约束值应用于预先选择的粒子组。 |
Paint | 通过用画笔绘制布料粒子来施加固定的约束值。 |
Gradient | 将约束值的从左到右线性渐变应用于预先选择的粒子组。 |
根据使用的模式,工具属性和所需执行的步骤会有所不同。在所有情况下,最后一步都对应于应用约束值的操作。
布料碰撞使游戏中的角色服装和其他面料更加逼真。在 Unity 中,布料有几种处理碰撞的布料粒子。可将布料粒子设置为:
要为布料设置碰撞粒子,请在 Cloth Inspector 中选择 Self Collision and Intercollision 按钮:
此时将在 Scene 视图中显示 Cloth Self Collision And Intercollision 窗口:
包含 Cloth 组件的蒙皮网格将自动显示布料粒子。最初没有任何布料粒子设置为使用碰撞。这些未使用的粒子显示为黑色:
要应用自碰撞或互碰撞,必须选择一组粒子来应用碰撞。要选择一组粒子进行碰撞,请单击 Select 按钮:
现在左键单击并拖动以便选择要应用碰撞的粒子:
选定粒子显示为蓝色:
勾选 Self Collision and Intercollision 复选框可将碰撞应用于选定粒子:
指定用于碰撞的粒子将显示为绿色:
要为布料启用自碰撞行为,请选择 Cloth Inspector 窗口的 Self Collision 部分,并将 Distance 和 Stiffness 设置为非零值:
属性: | 功能: |
---|---|
Distance | 每个粒子的包裹球体的直径。Unity 确保这些球体在模拟过程中不会重叠。Distance 属性的值应小于配置中的两个粒子之间的最小距离。如果距离较大,则自碰撞可能违反某些距离约束并导致抖动。 |
Stiffness | 粒子之间的分离冲力的强度。此值由布料解算器进行计算,应足以保持粒子分离。 |
自碰撞和互碰撞可能需要大量的总模拟时间。请考虑缩小碰撞距离并使用自碰撞索引来减少彼此碰撞的粒子数。
自碰撞使用顶点,而不是三角形,因此对于三角形远大于布料厚度的网格,不要指望碰撞能够完美运行。
Paint 和 Erase 模式允许通过按住鼠标左键并拖动单个布料粒子来添加或删除用于碰撞的粒子:
在 Paint 或 Erase 模式下,指定用于碰撞的粒子为绿色,未指定的粒子为黑色,画笔下方的粒子为蓝色:
可使用与指定自碰撞粒子相同的方式(如上所述)为互碰撞指定粒子。与自碰撞一样,可以指定一组用于互碰撞的粒子。
要启用互碰撞行为,请打开 Physics 设置(从 Unity 主菜单中选择:__Edit__ > Project Settings__,然后选择 Physics__ 类别),并在 Cloth InterCollision 部分将 Distance 和 Stiffness 设置为非零值:
布料互碰撞的 Distance 和 Stiffness 属性与以上描述的自碰撞的 Distance 和 Stiffness 属性功能相同。
布料无法直接与任意世界几何体碰撞,现在只会与胶囊碰撞体或球形碰撞体数组中指定的碰撞体相互作用。
球形碰撞体数组可以包含单个有效的 SphereCollider 实例(第二个为 null)或一对实例。在前一种情况下,ClothSphereColliderPair 仅表示待碰撞布料的单个球形碰撞体。在后一种情况下,它表示由两个球体以及连接这两个球体的锥体所定义的圆锥形胶囊形状。圆锥形胶囊形状在对角色的四肢进行建模时非常有用。
2017–12–05 页面已修订
在 2017.3 版中添加了布料自碰撞和互碰撞 NewIn20173
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.