Ich habe einige Probleme mit der Erkennung von Kollisionen. Ich möchte in der Konsole sehen, dass eine Kollision erkannt wird.Erkennen von Kollisionen in SceneKit Problem
Wenn Knoten generiert werden, sehe ich in der Konsole, welche Art von KategorieBitMask sie haben, also gibt es kein Problem. CollisionMask und contactBitMask werden ebenfalls festgelegt.
So interagieren Objekte miteinander ohne Probleme.
Wenn ich Masken ändere, hören sie auf miteinander zu interagieren, so dass sie sich gegenseitig durchlaufen. Also kann ich sagen, dass die Maske richtig eingestellt ist. Masken ich mit dem Helfer-Struktur festgelegt:
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
}
Ein Körper ist .Dynamisches physicsBody andere ist .static.
Meine Viewcontroller Klasse SCNPhysicsContactDelegate Protokoll implementieren und in viewDidLoad ich schreibe:
sceneView.scene.physicsWorld.contactDelegate = self
Danach versuche ich Methode zu verwenden, aber es nicht einmal genannt:
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
if contact.nodeB.physicsBody?.contactTestBitMask == 1 {
print("NodeB has mask = 1")
} else {
print("NodeB has mask != 1")
}
}
Nach dass ich auf den Bildschirm drücke und sehe, dass Würfel kommen und die ebene Oberfläche treffen, aber es gibt überhaupt keine Kontakterkennung. Delegiertenmethode physicsWorld (_ Welt: SCNPhysicsWorld, didBegin Kontakt: SCNPhysicsContact) wird gar nicht aufgerufen.
Was ich vermisse?
Vielen Dank!