2017-06-17 1 views
0

次のコードをSCNBoxを作成して画面に表示します。これは動作しますが、私は他の方向に電話を回すとすぐに、力のインパルスは更新されず、常に同じ古い位置でボックスを撃ちます。ここでARKit - ユーザーの電話方向への強制適用

がコードされています。私は力を加えるところ

@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があるが、それは考慮に入れ、ユーザの現在の電話の向きを取ることはありません。どうすれば修正できますか?

答えて

2

オンラインでは、定数ベクトルをapplyForceに渡しています。このメソッドはワールド空間でベクトルを取ります。したがって、一定のベクトルを渡すことは、常に同じ方向に力を加えることを意味します。カメラや他の何かが指している方向に基づいた方向が必要な場合は、その方向に基づいてベクトルを計算する。

(新しい)SCNNodeプロパティworldFrontは、ノードが指し示している方向を自動的にワールド空間に変換するので、物理的方法に便利です。 (それをスケールしたいかもしれませんが)

+0

ありがとうございました!魅力的なように働いた:)素晴らしい一日を! –

関連する問題