我目前正在尝试修改苹果提供的平面跟踪演示,以使小立方体发射物从应用程序创建的跟踪平面弹回。
我已经将物理物体添加到了各自的弹丸和墙壁上,但是由于某种原因,弹丸继续忽略了碰撞,只是穿过了墙壁。我曾尝试添加和删除位掩码,但它们似乎没有任何影响。
这是我目前正在为追踪飞机做的事情:
init (anchor: ARPlaneAnchor, in sceneView: ARSCNView) {
guard let meshGeometry = ARSCNPlaneGeometry(device: sceneView.device!) else {
fatalError("CANNOT CREATE GEOMETRY")
}
meshGeometry.update(from: anchor.geometry)
meshNode = SCNNode(geometry: meshGeometry)
meshNode.name = "ENV."
super.init()
self.setupMeshVisualStyle()
let body = SCNPhysicsBody(type: .static, shape: nil)
meshNode.physicsBody = body
addChildNode(meshNode)
}
这是子弹物理实现
class func spawnBullet() -> SCNNode {
// Omitted code (just setting size and stuff)
let cubeNode = SCNNode(geometry: cubeGeometry)
cubeNode.name = "BULLET"
let physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic, shape: nil)
physicsBody.isAffectedByGravity = false
physicsBody.damping = 0
physicsBody.categoryBitMask = CollisionCategory.bullet.rawValue
physicsBody.collisionBitMask = CollisionCategory.env.rawValue | CollisionCategory.player.rawValue
physicsBody.continuousCollisionDetectionThreshold = 0.01;
cubeNode.physicsBody = physicsBody
return cubeNode
}
我创建了一个单独的SCNPlane对象,其物理实体设置与跟踪的平面设置完全相同。奇怪的是,子弹成功地从SCNPlane上撞了下来,但是它们继续以完全相同的设置穿过被跟踪的飞机。