2

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)

ただし、このオブジェクトの上に別のオブジェクトが落下すると、中心を通過しません。代わりに、空中に浮いているように見えます。これは、物理体が完全な円柱であり、真ん中に穴のあるチューブとは異なります。オブジェクトが中心を通過できるようにするにはどうすればよいですか? チューブの外観は期待どおりです。

ありがとう!

4

2 に答える 2

6

SceneKit の動的ボディは凸状でなければなりません。(SceneKit だけでなく、ゲームでの衝突検出の背後にある一般的な理論を調べてみると、凸面と凹面の衝突検出では速度と効率に大きな違いがあることがわかります。) チューブは凹面の形状です。中に穴があります。

幸いなことに、チューブは静止体として使用されています。静的ボディのみの場合、物理形状 (の近似) を凹面ジオメトリにするオプションがあります。

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

これにはパフォーマンス コストがかかります。この変更後にフレームレートが CPU 使用率によって制限されている場合、またはダイナミック ボディを (効果的に) 凹面にしたい場合は、他のいくつかの形状を組み合わせた物理形状を作成すると、パフォーマンスが向上する可能性があります。たとえば、ダミーを構築します。リング状に配置された多数の円柱またはボックスを含むノード階層 (実際にはシーンにあるものではない) を作成し、それらから で物理形状を作成しSCNPhycsicsShape(node:options:)ます。

于 2014-12-10T22:00:38.503 に答える
0

物理ボディの形状をチューブの形状に合わせて変更します。

于 2014-12-10T13:49:46.070 に答える