Skip to content
OneYoungMean edited this page Oct 27, 2021 · 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中制作了该场景,你可以访问example文件夹进行查看.

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

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

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

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

Q:在安卓机器的性能怎么样呢

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

Q:有没有像magica cloth那样做多人的优化呢?

A:想要做到这一些并不难,但是这样做需要一个物理核心以及一些必要的辅助措施;但是这会让这个项目显得很臃肿,脱离了我对它原有的设想,所以我并不打算这样做.
如果您使用该项目的时候的确遇到了性能上的瓶颈,你可以发issue或者联系我的邮箱以获得进一步的帮助.

Q:已经有了项目,怎么在现有的项目当中使用呢?

A:确保jobs库已经正确安装就行,如何安装请参考这里https://www.bilibili.com/video/av543359862/