我已经做了几次尝试来解决这个问题,并阅读了我在这里/论坛/谷歌可以找到的所有内容。我使用的 CCD 阈值糊状物低于我的物体移动速度,并且使用的 CCD 半径远小于物体的半半径。这样做的唯一一件事就是让多球体卡在接缝上。我还尝试将 ERP/ERP2 设置为 0.9/1.0。[编辑] 好的,经过更多阅读;如果球体已经接触地面,CCD 将不起作用,如果我理解正确,ERP 只会影响带有关节的物体。
地面是在 Blender 中制作的三角网格,并使用 gainStaticNodeShape 获取形状。我试图缩放网格以获得更小的多边形,但即使是最小的(对于游戏可接受的)尺寸也不起作用,大约 32k 索引和 11k 多边形,500x500 单位,多球体的半径为 0.45 单位。[编辑] 多球体是两个相互重叠的球体,它们仅限于围绕 Y 轴的角运动,因此不能滚动。
球体通过地面快速“吸”,它不会慢慢下沉。我试图用 64 个子步使固定时间步更小 1/420 并没有给出更好的结果。这种情况最常发生在上坡或下坡时。我的地面是缓坡的,但 20% 的坡度似乎足以让它跌倒很多,但它也可能发生在水平地面上,只是不那么频繁。
当我进行第一次测试时,我使用了一个展开的大立方体作为地面,效果很好。
所以我现在的问题是我什至不知道为什么会这样,所以我不知道下一步该尝试什么?谁能给我一个解决方案或一些指示。
增加多球体大小有什么用(对于游戏,我不能增加超过 25-30%)我没有明确设置任何碰撞边距,但我认为这只会让我的球体漂浮在地面上?将地面从静态物体变为运动物体有什么好处吗?
如果球体低于地面,直接从球体向下使用射线测试并将其向上推是否有效?我认为不是,如果它首先能探测到地面,为什么它会掉下来..?
[编辑:附加信息] 在论坛和堆栈溢出时,有很多类似的问题出现。大多数似乎是关于非常小的物体。小物体(>0.2m)显然不是子弹的好选择,除非您想大量增加模拟步骤的数量。我的问题似乎不属于这一类,因为我最小的物体直径为 0.9m?
我现在还进行了调试绘制,以查看我用作地面的修剪的法线。我找不到法线的任何错误。
我还尝试增加球体的碰撞余量,但无济于事。
我进一步尝试使用建议的设置: ((btDefaultCollisionConfiguration)world.collisionConfiguration).setPlaneConvexMultipointIterations(3,3); ((btDefaultCollisionConfiguration)world.collisionConfiguration).setConvexConvexMultipointIterations(3, 3); 没有不同。
然而,我确实读到过关于光线投射效果不佳的大三角网格,我的网格是 512x512 的大单位,但我不确定这是否会导致我的对象从网格中掉下来?
我还读到球体形状存在三角形问题,但我再次不确定这是否是我的情况?我正在使用的球体被锁定以在所有轴上旋转。
我也尝试过使用 btCapsule 但它给出了相同的结果.. 气缸会更好吗?[编辑] 我尝试使用圆柱体,因为球体和胶囊不起作用。气缸工作得更好。不过,我仍然让它失败了一次。在通过球体/胶囊会非常快速和轻松地通过的地方之前,圆柱体一直在晃动。也许这可能是潜在问题的线索?不过,圆柱体并不是最适合角色形状的……
另一个可能的原因可能是网格中的三角形的边太长或边之间的比率很大。我在我的球体总是落下的斜坡上发现了一些。如果这确实是问题,除了在 Blender 中手动编辑网格外,我可以做些什么吗?
正如您所看到的,有很多这些问题和很多可能的答案,我不知道哪一个与我的情况相对应,有更好洞察力的人提供一些指示意义重大,谢谢!