我有一个带有动态物理体的立方体和一个带有运动物理体的平面。当我在平面上方放置一个立方体时,它将落在平面上,并且预计会发生反弹。
问题是:当立方体很小或很轻时,它只是通过平面。例如,立方体有0.1 * 0.1 * 0.1工作正常,但0.05 * 0.05 * 0.05很糟糕。我仍然可以通过身体接触通知。
这是我创建几何的代码:
T
答案 0 :(得分:1)
我很惊讶你发生了碰撞。请参阅SCNPhysicsBodyType docs - 运动类型适用于您移动的物体(通过设置其位置等)到原因碰撞,但这些物体本身不会受到与其碰撞的其他物体的影响。
如果您将楼层的类型设置为static,您可能会看到更好的结果。静态物体不会移动(无论是物理相互作用还是设置其位置),因此物理引擎可以更准确地检查与其发生碰撞的其他物体。
编辑:要了解的其他事项:
SCNPlane
而不是SCNBox
作为发言权。 (请注意,如果有帮助的话,你可以创建形状与其可见几何形状不同的物理实体。)我不确定SceneKit是什么,但很多物理引擎更容易检查" 某个对象从最后一帧传递这个无限边界?"在这个框架上这个有限区域里面是某个对象?" 答案 1 :(得分:1)
最后我发现这就是SceneKit的物理模拟。如果立方体下降太快,它会在平面上进行大的穿透。在物理模拟步骤中。在这种情况下,sceneKit只是让它通过飞机而不是碰撞。当我将立方体的速度更改为较小的值时它与平面相撞。
我的解决方案是在发生大的过度穿透时给立方体一个向上的速度,这是下降速度的30%。诀窍是调整立方体的速度直到碰撞发生。
答案 2 :(得分:0)
仅适用于球形物理形状
对于此问题,SCNPhysicsBody
具有特殊属性:continuousCollisionDetectionThreshold
例如,在涉及弹丸和目标的游戏中, 如果弹丸移动的距离比 一个时间步长内目标的厚度。通过设置射弹的 连续碰撞检测阈值匹配其直径,您 确保SceneKit始终检测弹丸之间的碰撞 和其他对象。