我在检测碰撞时遇到了一些问题。我想在控制台中看到检测到碰撞。
当生成节点时,我在控制台中看到它们具有哪种类别的BlockMask,所以一定没有问题。还设置了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 other是 .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 :(得分:3)
经过多个小时的调试挑战后,我发现在设置委托后我重写了场景。
当时:
sceneView.scene.physicsWorld.contactDelegate = self
let scene = SCNScene()
sceneView.scene = scene
应该是:
let scene = SCNScene()
sceneView.scene = scene
sceneView.scene.physicsWorld.contactDelegate = self
对于我的情况,这解决了这个问题。 希望有人可以节省时间:)