SCNNode与.dae导致问题的静态身体

我已经在搅拌机中build立了一个景观模型,导出到.dae并添加到我的xcode项目中。

我已经加载的场景,然后附加到我的landscapeNode的孩子(风景网格网格),这完全加载。

然而,当我将一个静态的物理体附加到landscspeNode上时,我的英雄节点似乎在试图在土地上空飞行时撞上了无形的墙。

我正在寻找的function是与我所build模的土地发生明显的碰撞,所以英雄节点不能在土地上飞行,并被迫移动。

注意:我没有在搅拌机中进行任何y轴的转换,xcode也只是简单地将节点90度旋转到-x轴。

编辑:代码我试图添加物理形状

landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithNode: [landscapeScene.rootNode childNodeWithName:@"Grid" recursively:NO] options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron}]]; landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithNode: landscapeNode options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron}]]; landscapeNode.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:[SCNPhysicsShape shapeWithGeometry: landscapeNode.geometry options:@{SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConcavePolyhedron}]]; 

如果在为节点创build物理主体时未指定其他选项,则会得到包含该节点几何体的凸包 。

因为你的景观是一个静态的物体,你可以使它更接近几何的凹形。 (请注意,这只适用于静态物体。)要做到这一点,你需要:

  1. 使用bodyWithShape:type:方法来创build主体,而不是staticBody
  2. 对于这种方法,你需要传递一个SCNPhysicsShape 。 用shapeWithGeometry:options:创build一个shapeWithGeometry:options:或者shapeWithNode:options:
  3. 对于options参数,传递包含关键字SCNPhysicsShapeTypeKey和相应的值SCNPhysicsShapeTypeConcavePolyhedron