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プロトコルで、トラッキング状態が変わると通知されるメソッドを実装

第2引数のARCameraのtrackingStateプロパティに、ARCamera.TrackingStateが入っている。

ref.https://developer.apple.com/documentation/arkit/arsessionobserver/2887450-session

実行!

ARCamera.TrackingStateの状況を、Viewに表示してみました。
ARCamera.TrackingStateの状況に応じて、ユーザにインストラクションを表示する事でUXを上げていけそうです。