T N*_*ate 2 scenekit swift scnnode
我正在尝试在 SceneKit 中制作一个管子及其物理体。
let BoxGeometry = SCNTube(innerRadius: 5, outerRadius: 12.5, height: 4)
Box = SCNNode(geometry: BoxGeometry)
Box.pivot = SCNMatrix4MakeRotation(Float(M_PI_2/8), 0, 1, 0)
Box.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: nil)
Box.physicsBody?.mass = 5
Box.categoryBitMask = colorCategory
scene.rootNode.addChildNode(Box)
Run Code Online (Sandbox Code Playgroud)
然而,当另一个物体落在这个物体上时,它不会通过中心。相反,它似乎悬浮在空气中。它的作用就像物理体是一个完整的圆柱体,而不是中间有孔的管子。我该如何解决这个问题,以便物体可以通过中心?管子外观符合预期。
谢谢!
SceneKit 中的动态物体必须是凸面的。(如果您研究游戏中碰撞检测背后的一般理论,即不仅仅是 SceneKit,您会发现凸面形状和凹面形状的碰撞检测在速度和效率上存在巨大差异。)管是凹面形状 - 它里面有个洞。
幸运的是,您的管子被用作静态物体。仅对于静态物体,有一个选项可以使物理形状(近似)成为凹面几何体:
let shape = SCNPhysicsShape(geometry: tube,
options: [SCNPhysicsShapeTypeKey: SCNPhysicsShapeTypeConcavePolyhedron])
box.physicsBody = SCNPhysicsBody(type: .Static, shape: shape)
Run Code Online (Sandbox Code Playgroud)
这样做会产生性能成本。如果您发现在此更改后帧率受到 CPU 使用率的限制,或者如果您想让动态物体(有效地)凹入,您可能会通过制作由几种其他形状组合而成的物理形状来获得更好的性能 - 例如构建一个假人包含一堆排列成环的圆柱体或盒子的节点层次结构(不是实际存在于场景中的层次结构),然后使用SCNPhycsicsShape(node:options:).