2017-12-29 35 views
0

私は衝突の検出にいくつか問題があります。コンソールに衝突が検出されたことを確認したい。SceneKitの問題での衝突の検出

ノードが生成されるとき、コンソールにはどのカテゴリのカテゴリマスクがあるのか​​分かりますので、問題はないはずです。 CollisionMaskとcontactBitMaskも同様に設定されています。

したがってオブジェクトは問題なく相互に作用します。

マスクを変更した場合、マスクは相互作用しなくなり、相互に干渉し合います。だから私はマスクが正しく設定されていると言うことができます。私はヘルパー構造体に設定 マスク:

struct BitMaskCategory: OptionSet { 
    let rawValue: Int 

    static let none = BitMaskCategory(rawValue: 0 << 0) // 0 
    static let box  = BitMaskCategory(rawValue: 1 << 0) // 1 
    static let plane = BitMaskCategory(rawValue: 1 << 1) // 2 
} 

一つの体には、他のする。dynamic physicsBodyが.STATICです。

私のViewControllerクラスSCNPhysicsContactDelegateプロトコルを実装し、のviewDidLoadに私が書く:その後

sceneView.scene.physicsWorld.contactDelegate = self 

を私はメソッドを使用しようとするが、それはさえ呼ばれていません。

func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) { 
    if contact.nodeB.physicsBody?.contactTestBitMask == 1 { 
     print("NodeB has mask = 1") 
    } else { 
     print("NodeB has mask != 1") 
    } 
} 

後私はスクリーンを押して、立方体が飛行機の表面にやってくるのを見ますが、接触検出は全くありません。デリゲートメソッドphysicsWorld(_ world:SCNPhysicsWorld、didBegin contact:SCNPhysicsContact)はまったく呼び出されません。

私が見逃していますか?

ありがとうございました!

答えて

0

私は、デリゲートを設定した後、私はシーンを書き直すことを発見しました。

ました:

sceneView.scene.physicsWorld.contactDelegate = self 
    let scene = SCNScene() 
    sceneView.scene = scene 

は次のようになります。私の場合のために

let scene = SCNScene() 
    sceneView.scene = scene 

    sceneView.scene.physicsWorld.contactDelegate = self 

これが問題を修正します。 誰かがこの時間を節約することを願っています:)