ARKitを利用し、検出した平面に3Dモデルを常にカメラの方に向かせてみます。
最初は現在のカメラの位置を取得し、3Dモデルノードのポジションを常にアップデートをしようと考えましたが、もっと簡単にできる方法がありました。
SCNBillboardConstraint
SCNBillboardConstraintを利用する事で簡単に、3Dモデルを常にカメラ方向に向かせる事が出来ます。
1 | class SCNBillboardConstraint : SCNConstraint |
公式ドキュメントによると、ノードを常に現在のカメラを向くように方向付ける制約との事。
SCNNodeのインスタンスのconstraintsプロパティに追加するだけで、カメラ目線を実現できます。
公式ドキュメントリンク
https://developer.apple.com/documentation/scenekit/scnbillboardconstraint
1 2 3 4 5 6 | let billboardConstraint = SCNBillboardConstraint() //Y軸の回転はこの制約を加えない様にします。 billboardConstraint.freeAxes = SCNBillboardAxis.Y legoNode.constraints = [billboardConstraint] |
実行
3Dモデルは下記を利用させていただきました。
https://www.turbosquid.com/3d-models/lego-minifigure-lwo/619834
LEGOブロックのキャラクターが、常にこちらを向いてくれる様になりました。
設定どおり、Y軸は固定しているので縦の動きの時は固定されていますね。