![見出し画像](https://assets.st-note.com/production/uploads/images/78585594/rectangle_large_type_2_353b89986982d2d46e12ba5774eaf1a3.png?width=1200)
[ARKit]SCNNodeの現在位置・角度を返してくれるextensionを実装した
はじめに
ARKitを実装していると「あれ?このSCNNodeなんでこんな場所に描画されているんだろう?」とか、「このSCNNodeの座標を知りたい」「角度を知りたい」とか思う場面によく遭遇します。
まあprint文とかで書けば一発なんですけど
例えば自分の開発しているバーチャルYouTuberアプリとかだと
//これで欲しい情報は取れるが、
print(leftEyeUpperLidNode.position)
//他の人に相談する際に、可読性を上げたいので
print("x:", leftEyeUpperLidNode.position.x)
print("y:", leftEyeUpperLidNode.position.y)
print("z:", leftEyeUpperLidNode.position.z)
とまあ、こういう風に冗長なコードを書いてしまうことが稀にあります。(純粋に自分の実力不足)
そこで、コードが冗長にならないようなExtensionを実装しました。
実装したExtension
とはいえ、そこまで大層なものではないんですが。。。
extension SCNNode {
//SCNNodeの現在位置を返す
func getCurrentPosition() -> SCNVector3 {
let pos: SCNVector3 = self.position
return pos
}
//SCNNodeの現在角度を返す
func getCurrentAngle() -> SCNVector3 {
let angle: SCNVector3 = self.eulerAngles
return angle
}
}
あとは使いたい箇所に下記コードを挿入してあげるだけです。
今回はleftEyeUpperLidNodeの場所を取ってあげたいので入れていますが、ここにはみなさんの調査したいSCNNodeの名前を入れてあげてください
//ViewContoller.Swift
let position = leftEyeUpperLidNode.getCurrentPosition()
print("x:", position.x, " y:", position.y, " z:", position.z)
これで冗長さが少しは回避できたかな?
以上です。
宣伝
宣伝なんですが昨日こんなARアプリ作ってみました
よかったらいいねとかリツイートしてもらえると嬉しいです
大通公園で宙に浮かぶはてなブロックをARで実装しました🪙#AR #b3d #blender #blender初心者#Mathew3d_log #MathewAR_log pic.twitter.com/jDnr7QW0iI
— ましゅう/AR, CG (@simd_float4x4) May 14, 2022