最近ARKitを触ることがあり、
「カメラが向いてる方向に何かを発射したい」
と思ったのですが、結構実装に苦労したので共有します。

if let camera = sceneView.pointOfView { // カメラを取得
    // カメラの向いてる方向を計算
    let mat = camera.transform
    let dir = SCNVector3(-1 * mat.m31, -1 * mat.m32 + 0.1, -1 * mat.m33)
    // 上方向に位置を補正
    node.position = SCNVector3Make(camera.position.x, camera.position.y - 0.01, camera.position.z)
    node.physicsBody?.applyForce(dir, asImpulse: true)
}
sceneView.scene.rootNode.addChildNode(self)

※sceneViewはARKitで使用するARSCNViewのインスタンス、nodeはSCNNodeのインスタンスです

やってる事自体は単純で、

  1. nodeの位置をカメラの中心位置に合わせる
  2. nodeに対して、カメラが向いてる方向に力を加える

の2つだけです。
使用する機会は多そうに見えるのですが、(似たような処理はあるものの)調べても実装方法が出てこなかったので割と試行錯誤しました。
これができればARのシューティングゲームなど、色々作れる気がします。

そして今、ブレイブソフトではARKitを使ったゲームアプリを開発中で、初期verが近々リリースできるかと思います!

リリースしたらまたお知らせしますのでお楽しみにー!

【追記】
「ARケチャマヨバトル」というアプリをリリースしました!
リアルタイムでARで対戦できるゲームとなっていますので、是非ともインストールしてみてください!
インストール