SceneKit Tube Physics Body就像圆柱体一样,如何使它像管一样?

你好我想在Scene Kit中制作一个管子和它的物理体

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)

但是当另一个物体落在这个物体上时,它不会穿过中心.相反,它看起来似乎悬浮在空气中.它的作用就像物理体是一个完整的圆柱体,而不是像中间有孔的管子.我该如何解决这个问题,以便物体可以穿过中心?管外观看起来像预期的那样.

谢谢!

SceneKit中的动态实体必须是凸的. (如果你研究游戏中碰撞检测背后的一般理论,即不仅仅是SceneKit,你会发现在凸形与凹形之间的碰撞检测之间在速度和效率上存在巨大差异.)管是凹形的 – 它有一个洞.

幸运的是,你的管子被用作静止的身体.对于静态物体,可以选择使凹面几何体的物理形状(近似):

let shape = SCNPhysicsShape(geometry: tube, 
    options: [SCNPhysicsShapeTypeKey: SCNPhysicsShapeTypeConcavePolyhedron])
box.physicsBody = SCNPhysicsBody(type: .Static, shape: shape)

这有性能成本.如果你发现这个变化后你的帧速率受CPU使用率的限制,或者你想让动态体(有效)凹陷,你可以通过制作一个由几种其他形状组成的物理形状来获得更好的性能 – 例如构建一个虚拟节点层次结构(不是在场景中实际存在的层次结构),包含一堆排列成环的圆柱体或盒子,然后使用SCNPhycsicsShape(节点:选项:)从它们制作物理形状.

https://stackoverflow.com/questions/27391763/scenekit-tube-physics-body-acting-like-cylinder-how-to-make-it-act-like-tube

转载注明原文:SceneKit Tube Physics Body就像圆柱体一样,如何使它像管一样?