2016-11-06 7 views
2

私はiPhoneのためのテスト3Dゲームを作成しようとしていますが、私は物理学に悩まされています。車と救急車がお互いに接触すると、車は消えませんか?以前はSpriteKitを使っていましたが、私はPhysicsWorld ContactDelegateを自分で設定しなければならないことを知っていましたが、これはSceneKitでこれを行う方法がわかりません。SceneKit Physicsお問い合わせ

コード:

ambulance.physicsBody?.categoryBitMask = PhysicsCategory.ambulance 
ambulance.physicsBody?.contactTestBitMask = PhysicsCategory.car 

car.physicsBody?.categoryBitMask = PhysicsCategory.car 


func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) { 
    let firstNode = contact.nodeA 
    let secondNode = contact.nodeB 

    if(firstNode.physicsBody?.categoryBitMask == PhysicsCategory.ambulance && secondNode.physicsBody?.categoryBitMask == PhysicsCategory.car || 
     firstNode.physicsBody?.categoryBitMask == PhysicsCategory.car && secondNode.physicsBody?.categoryBitMask == PhysicsCategory.ambulance){ 

     firstNode.physicsBody?.categoryBitMask = PhysicsCategory.ambulance 
     secondNode.physicsBody?.categoryBitMask = PhysicsCategory.car 

     secondNode.removeFromParentNode() 
    } 
} 

私が誰かが私を助けることができると思います!ありがとう!

編集:私は自分にシーンのcontactDelegateを設定する方法を見つけた:

同じ問題を抱えているすべての人のために
scene.physicsWorld.contactDelegate = self 

答えて

1

: 私は私のノードのPhysicsBodyを設定するのを忘れていました。

私は追加する必要がありましたコード:

ambulance.physicsBody = SCNPhysicsBody.dynamic() 
ambulance.physicsBody?.isAffectedByGravity = false 

car.physicsBody = SCNPhysicsBody.static() 
関連する問題