私の衝突が検出されない理由を理解できません。なぜそれが私に多くの問題を引き起こしているのかを知ることができれば幸いです。スウィフト、シーンキット。よしSceneKit衝突検出が検出されていません
私はこの文から始めるいつもように:
override func viewDidLoad() {
super.viewDidLoad()
createScene()
scene.physicsWorld.contactDelegate = self
// This Statement.^
motionManager = CMMotionManager()
motionManager.startAccelerometerUpdates()
}
私は衝突がボールとボックスノードとの間に発生します。私のボックスノードはmainBoxで、私のボールは...ボールです。 bodyNamesはどこから来る
ball.position = SCNVector3Make(0, 1.75, 3)
ball.geometry = ballGeometry
ballMaterial.diffuse.contents = UIColor.greenColor()
ballGeometry.materials = [ballMaterial]
scene.rootNode.addChildNode(ball)
ball.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: SCNPhysicsShape(geometry: ballGeometry, options: nil))
ball.physicsBody?.angularVelocityFactor = SCNVector3Make(0, 0, 0)
ball.physicsBody?.angularVelocity = SCNVector4Make(0, 0, 0, 0)
ball.name = "sphere"
ball.physicsBody?.categoryBitMask = bodyNames.Person
ball.physicsBody?.contactTestBitMask = bodyNames.Floor
ball.physicsBody?.collisionBitMask = bodyNames.Floor
ball.physicsBody?.affectedByGravity = true
ball.addChildNode(cameraNode)
mainBox.position = SCNVector3Make(0, -0.75, 2)
mainBox.geometry = mainBoxGeometry
mainBoxMaterial.diffuse.contents = UIColor.whiteColor()
mainBox.physicsBody?.categoryBitMask = bodyNames.Floor
mainBox.physicsBody?.contactTestBitMask = bodyNames.Person
mainBox.physicsBody?.collisionBitMask = bodyNames.Person
mainBox.physicsBody = SCNPhysicsBody.staticBody()
mainBoxGeometry.materials = [mainBoxMaterial]
mainBox.name = "floor"
scene.rootNode.addChildNode(mainBox)
そして今、マジックが起こるところが、また、魔法が起きていない...
func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact) {
let nodeA = contact.nodeA
let nodeB = contact.nodeB
if nodeA.physicsBody?.categoryBitMask == bodyNames.Person && nodeB.physicsBody?.categoryBitMask == bodyNames.Floor || nodeA.physicsBody?.categoryBitMask == bodyNames.Floor && nodeB.physicsBody?.categoryBitMask == bodyNames.Person {
print("I collided with the damn box.")
}
}
ああ、これの事はあります。
答えを得るためにコードを追加する必要がある場合はお知らせください。
の
physicsBody
かどうかを確認する必要がありますmainBox' physicsBodyを設定してからphysicsBody自体を設定してください。 –非常に単純な修正ですが、今は正しく動作します。ありがとう。 @ JamesP –