質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

680閲覧

アニメーション中のオブジェクト座標の取得

Ryukito_again

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/09/17 17:06

前提・実現したいこと

ARKitを用いて簡単なシューティングアプリを開発しています。
球体の敵オブジェクトを出現させ、横移動のアニメーションをしています。

シューティングゲームなので敵の攻撃モーション(敵オブジェクトの座標からプレイヤー(スマホのカメラ)にむけて弾オブジェクトの発射)を追加しようと考えています。

実際に敵の攻撃モーションは追加できたのですが、問題は敵の攻撃時の弾オブジェクトの発射位置です。

理想は敵の攻撃時、その時点での敵オブジェクトの座標から弾オブジェクトを発射したいです。
しかし、実際に弾オブジェクトが発射される座標は、敵オブジェクトの最初の出現位置になっています。

つまり、敵オブジェクトはアニメーションにより常に変化しますが、攻撃開始地点は常に固定されているのです。

アニメーション中のオブジェクトの座標を取得するにはどのようにしたら良いのでしょうか?

該当のソースコード

Swift

1//敵オブジェクトの生成 2func attacker(_ PositionX: Float,_ PositionY: Float,_ PositionZ: Float) { 3 //球体を生成 --rediusは半径 4 let attackerObj = SCNSphere(radius: 0.5) 5 let attackerNode = SCNNode(geometry: attackerObj) 6 let attackerPositionX = PositionX 7 let attackerPositionY = PositionY 8 let attackerPositionZ = PositionZ 9 10 attackerNode.position = SCNVector3(attackerPositionX, attackerPositionY + 1.0, attackerPositionZ) 11 attackerNode.scale = SCNVector3(0.5, 0.5, 0.5) 12 attackerNode.name = "attacker" 13 14 (中略) 15 16 //?秒間かかるアニメーション 17 let attackermoving = SCNAction.move(by: SCNVector3(5, 1.0, -1.5), duration: TimeInterval(3)) 18 let attackermoving2 = SCNAction.move(by: SCNVector3(-5, 1.0, -1.5), duration: TimeInterval(3)) 19 let attackerstoping = SCNAction.wait(duration: 0.3) 20 attackerNode.runAction( 21 SCNAction.repeatForever( 22 SCNAction.sequence([ 23 attackermoving, 24 attackermoving.reversed(), 25 attackerstoping, 26 attackermoving2, 27 attackermoving2.reversed(), 28 ]) 29 ) 30 ) 31 sceneView.scene.rootNode.addChildNode(attackerNode) 32 } 33 34 35//弾オブジェクトの生成 36func attacking() { 37 let attackerDate = sceneView.scene.rootNode.childNode(withName: "attacker", recursively: false) 38 let attackingPosition = attackerDate?.position //左のように書くと敵オブジェクトの最初の出現位置が攻撃開始位置になる 39 40//弾オブジェクトの生成 41 let attackerbullet = SCNSphere(radius: 0.005) 42 let attackerbulletNode = SCNNode(geometry: attackerbullet) 43 44//発射時の弾の位置 45 attackerbulletNode.position = attackingPosition! 46(以下略)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問