通过跟踪平面进行ARKit物理对象的定相

时间:2019-07-15 09:50:09

标签: physics collision arkit bitmask

我目前正在尝试修改苹果提供的平面跟踪演示,以使小立方体发射物从应用程序创建的跟踪平面弹回。

我已经将物理物体添加到了各自的弹丸和墙壁上,但是由于某种原因,弹丸继续忽略了碰撞,只是穿过了墙壁。我曾尝试添加和删除位掩码,但它们似乎没有任何影响。

这是我目前正在为追踪飞机做的事情:

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上撞了下来,但是它们继续以完全相同的设置穿过被跟踪的飞机。

0 个答案:

没有答案