2017-12-29 10 views
0

충돌 감지에 몇 가지 문제가 있습니다. 나는 콘솔에서 충돌이 감지되는지보고 싶다.SceneKit 문제에서 충돌 감지

노드가 생성되면 콘솔에 어떤 범주의 BitMask가 있는지 알 수 있으므로 아무런 문제가 없어야합니다. 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 

이 문제를 해결합니다. 누군가가 다음과 같이 시간을 절약 할 수 있기를 바랍니다.