【发布时间】:2018-02-15 21:06:33
【问题描述】:
我正在尝试使用 ARkit 和 SceneKit 构建游戏,但是在设置了physicsWorld 委托和对象的物理主体之后,委托方法 didBeginContact 没有被调用。
这是我的物理体结构
struct CollisionCategory {
static let moltenBullet :Int = 4
static let iceShield :Int = 8
}
这就是我设置物理体的方式
let collisionShape = SCNPhysicsShape(node: node, options: nil)
self.physicsBody = SCNPhysicsBody(type: .dynamic, shape: collisionShape)
self.physicsBody?.categoryBitMask = self.categoryMask
self.physicsBody?.contactTestBitMask = self.collisionMask
self.physicsBody?.collisionBitMask = self.collisionMask
我使用self是因为它是一个继承自SCNNode的自定义类的物理体,collisionMask和categoryMask是使用上面的struct在构造函数中设置的。
在 didBeginContact 中,我想打印一些东西,但什么也没发生。 我已经将 SCNPhysicsContactDelegate 设置为
sceneView.scene.physicsWorld.contactDelegate
sceneView 是 ARSCNView。
我正确地看到了physicsBody的形状
SCNDebugOptionShowPhysicsShape
为什么会这样?
【问题讨论】:
-
您是否希望两个具有相同
CollisionCategory的对象或子弹和盾牌发生碰撞? -
对象是这样声明的 object1(category: object1, collision: object2), object2(category: object2, collision: object1)
-
对不起,是的!我预计子弹和盾牌会碰撞