Skip to content
OneYoungMean edited this page Aug 7, 2020 · 45 revisions

Q:为什么骨骼模型会出现穿模?

A: 从纯粹的物理学上来讲,这只是一个有碰撞体,节点和杆件的物理模型,而不是检测mesh是否重叠的图形学黑科技

所以,一般有两种情况:

情况A:碰撞体没能覆盖住mesh

你在制作碰撞体的过程中没有完整的将mesh包裹进去,漏了一部分在外面,请尝试修改碰撞体的位置参数与半径大小;

另外,有时候目标的碰撞体与其组件上的transfrom位置过远,也可能导致这个状况,并非是脚本有问题,而是由于transfrom在旋转的过程当中也会带着碰撞体绕其position旋转,一个经典的例子就是案例当中的miku模型,由于盆骨的位置实在太高,一旦稍微转动就会导致一个距离较远的胶囊体跑偏,最终被删掉了;

你可以尝试创建一个新的gameobject,并使其一直处于你理想的位置.

情况B:迭代的次数过低.

高次数的迭代意味更加庞大的性能开销,并随着次数的增多线性增长,但同时也意味着更仔细的分割移动情况与计算新位置.

迭代次数越高,其对于碰撞体运动轨迹与节点的运动轨迹的切片就越密集,这是高速运动(图中胶囊体相当等于每秒24m)下迭代32次的场景:


Q:为什么我的布料一直在抖动?(比如裙子各种飞,头发震颤)?

A:建议依次检查以下几个方面:

是否有有约束在碰撞体的范围内:常见于裙子这种有需要约束围一圈的情况,目前经常出现的情况有盆骨附近的碰撞体过大导致挤压了skirt,请调整碰撞体大小.

尝试提高迭代次数: 这是个很有效,但是治标不治本的方案,通常而言,正常的参数设置不会出现异常的颤动情况.

避免超出常规的设定参数:我承认把重力设置为10或者把某些参数设置成-1会让场景很酷,但是在低次数的迭代下这会导致频繁的颤动与一些奇怪问题.

避免不合理的杆件设定:不合理的杆件设定(比如对头发使用shear)可能会导致一些奇怪的效果,其中就包括震颤.

动作本身的问题:如果是该问题,则颤抖无法避免,一个有趣的小解决方案是取消unity对于动画的压缩,通常能得到一定缓解.


Q为什么我的碰撞体无效?

A:Collider是否与骨骼发生碰撞一共有三个参数在控制 :

1.ADBEditorCollider上的是否开启选项.

2.碰撞体属性与目标骨骼的接受碰撞体的属性不符合.

3.主面板上的碰撞模式选项为成不计算碰撞.


Q:为什么 距离补偿 属性并不能使骨骼完全的静止?

如果你是高性能模式下,的确会存在这个问题,因为迭代的顺序并不精确,请尝试关闭该模式.

Q:文件包里的模型可以用吗?

A:UntiyChan请访问https://unity-chan.com/

Miku模型一作是DigitrevX大佬,我是二作,经过大佬同意,可以在非商业的模式下使用该模型,商业需求请上D站联系DigitrevX大佬.

R1N4为公开免费模型,使用前可以参考一下其免费协议,同时强烈安利这个大佬的其他模型XD.

Q为什么我的裙子/头发会消失?

如果仍然存在请发issue.


Q:性能方面具体怎么样?

A: 说出来你们可能不大相信,相比于曾经的DynamicBone,我们在性能上做到了及其夸张,甚至有点匪夷所思的地步.
该套物理系统在60帧的情况下,支持128名角色的物理模拟,任意两个角色都可以互相发生碰撞
在一些极端的性能情况下,它甚至可以异步执行物理!
我在示例中的场景6中制作了该场景,你可以下载示例 以查看情况.

Q:请问白名单/黑名单的使用有哪些细节要注意的?

A: 这是一个好问题,如果你了解C#,你可以快速参考一下ADBConstraintReadAndPointControll:665.不了解也没关系,这是一个脚本读取处理过程图
另外,所有含有列表的设定中,都是排在前面的优先级高于排在后面的优先级 (此处应有图)

Q:为什么在(10000,10000,10000)位置会出现奇怪的滞留现象?

A: 这是因为浮点误差,一个极大的值加上一个极小的值会导致极小的值位置出现偏差.目前我没有很好的方法解决这个问题,你可以尝试降低迭代次数,增大单次迭代长度来减轻这种奇怪现象.

Q:能用在安卓系统上吗?

A: 还不是很清楚,哪位大佬帮忙试一下XD

Clone this wiki locally