第2章 ARKit 堤 修一/@shu223
2.4.2 仮想オブジェクトとして検出した平面に置く
前項で作成した仮想オブジェクトのノードを、検出した平面アンカーに対応するノードに追加するだけです。
平面を新たに検出したときに呼ばれるARSCNViewDelegateのrenderer(_:didAdd:for:)で行う場合の実装は次のようになります。
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { // 平面アンカーに対応するノード上に仮想オブジェクトのノードを載せる node.addChildNode(virtualObjectNode) }
図2.5 現実世界の平面を検出し、仮想オブジェクトを設置
本節では、さらにARKitを奥深く触っていくための、開発に便利な、あるいは適切なユーザー体験を提供するために不可欠な機能について解説します。
サンプルコード:04_DevMisc
2.5.1 トラッキング状態を監視する
入門編で、ARKitではARSessionをrunするだけで、カメラやモーションセンサによるデータ取得が始まり、現実空間の認識とデバイスのトラッキングが始まると説明しました。しかし、あらゆる状況下で最高の精度を発揮できるわけではありません。何らかの理由でトラッキングが利用できなかったり、精度が下がっていることもあります。適切なユーザー体験を提供するためには、そういった状況も適切にハンドリングする必要があるでしょう。
そのために、ARSessionObserverプロトコルには、トラッキング状態に変化があると呼ばれるメソッドが用意されています。
func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera)
トラッキング情報は、第2引数に渡されるARCameraオブジェクトのtrackingStateプロパティに入っています。型はARCamera.TrackingStateのenumで、次の種類が定義されています。