ARSessionをRunした後に、トラッキングがはじまるまでの1秒程度の時間タイムラグがあります。
また特徴量が少なすぎたり、カメラがぶれていたりすると精度高くトラッキングできません。
こういったカメラの状態を適切にハンドリングする為に、ARCamera.TrackingStateを利用していきます。
ARCamera.TrackingStateについて
ARCamera.TrackingStateの種類
- notAvailable : トラッキング出来ない
- normal: OK
- limited: トラッキング品質に制限あり
- initializing: 初期化中
- relocalizing: 再開準備中
- excessiveMotion: カメラを動かしすぎ
- insufficientFeatures: 特徴量が十分でない
※limitedの理由はenumのAssociated Valueで取得
ref. https://developer.apple.com/documentation/arkit/arcamera/trackingstate
ARSessionObserverでトラッキング状態変更を監視
ARSessionObserverプロトコルで、トラッキング状態が変わると通知されるメソッドを実装
1 | func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) |
第2引数のARCameraのtrackingStateプロパティに、ARCamera.TrackingStateが入っている。
ref.https://developer.apple.com/documentation/arkit/arsessionobserver/2887450-session
実行!
ARCamera.TrackingStateの状況を、Viewに表示してみました。
ARCamera.TrackingStateの状況に応じて、ユーザにインストラクションを表示する事でUXを上げていけそうです。