Ios ARKit-在用户';s电话方向

Ios ARKit-在用户';s电话方向,ios,arkit,Ios,Arkit,我有以下代码创建一个SCNBox并在屏幕上拍摄它。这是可行的,但只要我把手机转到任何其他方向,力脉冲就不会更新,它总是在原来的位置射击盒子 代码如下: @objc func tapped(recognizer :UIGestureRecognizer) { guard let currentFrame = self.sceneView.session.currentFrame else { return } /

我有以下代码创建一个SCNBox并在屏幕上拍摄它。这是可行的,但只要我把手机转到任何其他方向,力脉冲就不会更新,它总是在原来的位置射击盒子

代码如下:

@objc func tapped(recognizer :UIGestureRecognizer) {

        guard let currentFrame = self.sceneView.session.currentFrame else {
            return
        }

        /
        let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)

        let material = SCNMaterial()
        material.diffuse.contents = UIColor.red
        material.lightingModel = .constant

        var translation = matrix_identity_float4x4
        translation.columns.3.z = -0.01

        let node = SCNNode()
        node.geometry = box
        node.geometry?.materials = [material]

        print(currentFrame.camera.transform)

        node.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)

        node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)
        node.physicsBody?.applyForce(SCNVector3(0,2,-10), asImpulse: true)

        self.sceneView.scene.rootNode.addChildNode(node)


    }

第26行是我施加力的地方,但它没有考虑用户当前的手机方向。我怎样才能解决这个问题

在第26行,您将一个常量向量传递给
applyForce
。该方法在世界空间中获取一个向量,因此传递一个常量向量意味着你总是在同一个方向上施加力-如果你想要一个基于相机或其他东西指向的方向的方向,你需要基于该方向计算一个向量


(新的)SCNNode属性在这里可能很有用-它提供节点指向的方向,自动转换为世界空间,因此它对物理方法很有用。(尽管您可能想扩展它。)

非常感谢您!工作得很有魅力:)祝你有一个美好的一天!你能添加一些示例代码来理解它吗?