ooO*_*lly 5 3d ios scenekit arkit
我有一个具有动态物理体的立方体和一个具有运动物理体的平面。当我将一个立方体放在平面上方时,它会掉到平面上并预期会发生反弹。
该问题是:当立方体小或轻的,只是经过plane.For例如,立方体有0.1 * 0.1 * 0.1,做工精细而在0.05 * 0.05 * 0.05 sucks.In这种情况下,我仍然可以物理接触身体的通知。
这是我创建几何的代码:
//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;
Run Code Online (Sandbox Code Playgroud)
我\xe2\x80\x99让你感到惊讶\xe2\x80\x99竟然发生了冲突。请参阅SCNPhysicsBodyType 文档\xe2\x80\x93 运动学类型适用于您移动(通过设置其位置等)以引起碰撞的物体,但 \xe2\x80\x99 本身不会受到与它们碰撞的其他物体的影响。
\n\n如果将 Floor\xe2\x80\x99s 类型设置为static,则\xe2\x80\x99s 可能会看到更好的结果。静态物体不会移动(无论是由于物理相互作用,还是通过您设置其位置),因此物理引擎可以更准确地检查与其碰撞的其他物体。
\n\n编辑:其他需要调查的事情:
\n\nSCNPlane而不是 aSCNBox来表示您的地板。(请注意,如果有帮助的话,您可以创建形状与其可见几何形状不同的物理体。)我不确定 SceneKit 的情况,但对于许多物理引擎来说,检查“有一些物体自上一帧以来就通过了这个无限边界?” 而不是“这个框架上的这个有限区域内是否有某个物体?”| 归档时间: |
|
| 查看次数: |
2093 次 |
| 最近记录: |