Обнаружение столкновений SceneKit не обнаруживается

Я не могу понять, почему мои столкновения не обнаруживаются. Я надеюсь, что вы можете понять, почему, потому что это вызывает у меня много проблем, и мне нужно научиться делать это правильно. Swift, SceneKit.

Хорошо, так как всегда я начинаю с этим утверждением:

    override func viewDidLoad() {
    super.viewDidLoad()


    createScene()



   scene.physicsWorld.contactDelegate = self

   // This Statement.^

    motionManager = CMMotionManager()
    motionManager.startAccelerometerUpdates()


}

Я хочу, чтобы произошло столкновение между мячом и узлом коробки. Мой узел box - это mainBox, а мой шарик -... ball.

 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.")

    }

}

Ох, и вот откуда родом bodyNames.

struct bodyNames {

static let Person = 0x1 << 1
static let Floor = 0x1 << 2

}

Дайте мне знать, если мне нужно добавить больше кода, чтобы ответить, я был бы рад сделать это.

1 ответ

Ты проверил ли didBeginContact посетил или нет?

если посетил, проверьте условие if

nodeA.physicsBody?.categoryBitMask == bodyNames.Person && nodeB.physicsBody?.categoryBitMask == bodyNames.Floor || nodeA.physicsBody?.categoryBitMask == bodyNames.Floor && nodeB.physicsBody?.categoryBitMask == bodyNames.Person

если не посещали вообще, нужно проверить, physicsBody мира, коробка и шар конфиг правильно

Другие вопросы по тегам