Ios sceneKit动态物理身体穿过地板
我有一个具有动态物理体的立方体和一个具有运动物理体的平面。当我将立方体放置在平面上方时,它将落在平面上,并且预计会反弹 问题是:当立方体很小或很轻时,它只是穿过平面。例如,立方体的0.1*0.1*0.1工作正常,但0.05*0.05*0.05很差。在这种情况下,我仍然会收到身体接触通知 这是我创建几何图形的代码:Ios sceneKit动态物理身体穿过地板,ios,3d,scenekit,arkit,Ios,3d,Scenekit,Arkit,我有一个具有动态物理体的立方体和一个具有运动物理体的平面。当我将立方体放置在平面上方时,它将落在平面上,并且预计会反弹 问题是:当立方体很小或很轻时,它只是穿过平面。例如,立方体的0.1*0.1*0.1工作正常,但0.05*0.05*0.05很差。在这种情况下,我仍然会收到身体接触通知 这是我创建几何图形的代码: //cube //when dimension is 0.1 everything is fine float dimension = 0.05; SCNBox *cube = [SC
//cube
//when dimension is 0.1 everything is fine
float dimension = 0.05;
SCNBox *cube = [SCNBox boxWithWidth:dimension height:dimension length:dimension chamferRadius:0];
cube.materials = @[material];
SCNNode *node = [SCNNode nodeWithGeometry:cube];
node.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:nil];
node.physicsBody.mass = 1;
node.physicsBody.categoryBitMask = phsicBodyCategoryCube;
node.physicsBody.collisionBitMask = phsicBodyCategoryPlane;
node.physicsBody.contactTestBitMask = phsicBodyCategoryPlane;
//plane
self.planeGeometry = [SCNBox boxWithWidth:100 height:0.01 length:100 chamferRadius:0
plane.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeKinematic
shape: [SCNPhysicsShape shapeWithGeometry:self.planeGeometry options:nil]];
plane.physicsBody.categoryBitMask = phsicBodyCategoryPlane;
plane.physicsBody.collisionBitMask = phsicBodyCategoryCube;
plane.physicsBody.contactTestBitMask = phsicBodyCategoryCube;
我很惊讶你会遇到碰撞。请参见–运动学类型适用于移动(通过设置其位置等)以引起碰撞,但自身不受其他实体碰撞影响的实体 如果将楼板的类型设置为,可能会看到更好的结果。静态物体不会移动(由于物理相互作用,或者通过设置其位置),因此物理引擎可以更准确地检查与它碰撞的其他物体
编辑:要查看的其他内容:
- 在地板上使用
而不是SCNPlane
。(请注意,如果有帮助的话,您可以创建形状不同于其可见几何体的物理实体。)我不确定SceneKit的形状,但对于许多物理引擎来说,检查“自上一帧以来是否有某个对象通过此无限边界?”比检查“此帧上此有限区域内是否有某个对象”更容易SCNBox
- 为移动对象启用精确碰撞检测李>
我的解决方案是,当发生较大的过度穿透时,给立方体一个向上的速度,即下降速度的30%。诀窍是调整立方体的速度,直到发生碰撞。仅适用于球形物理形状 对于此问题,
SCNPhysicsBody
具有特殊属性:
例如,在涉及投射物和目标的游戏中,一个小的
如果射弹的移动距离超过目标距离,则射弹可能会穿过目标
一个时间步长内的目标厚度。通过设置射弹的
continuousCollisionDetectionThreshold以匹配其直径,您可以
确保SceneKit始终检测弹丸之间的碰撞
和其他物体
您是否尝试过更改
物理世界.timeStep
值?不,我没有更改。非常感谢!我误解了SCNPhysisbodytype。但当我尝试使用SCNPhysicsByTypeStatic时,多维数据集仍然会穿过地板。嗨,你能提供一些关于如何解决问题的更多信息吗。