ARCoatingOverlayViewとは
カメラから取得したライブ映像にオーバーレイ(上にかぶせる形で)でViewを表示させる。
ARKitが実世界をトラッキングするためにデバイスを動かしてほしいというコーチングをする際に、このViewを表示させてユーザーに指示を出す。
実際の表示するまでの手順
1 ARSessionを設定する
let coachingView = ARCoachingOverlayView()
.
.
.
coachingView.session = sceneView.session
2 ARCoachingOverlayViewのDelegateメソッドを設定する
coachingView.delegate = self
ARCoachingOverlayViewを実装するには下記のDelegateを委任する必要ある。
ARCoachingOverlayViewDelegate
下記三つのメソッドを持っている。
func coachingOverlayViewWillActivate(ARCoachingOverlayView)
// コーチングが表示される前に呼ばれる
func coachingOverlayViewDidDeactivate(ARCoachingOverlayView)
// コーチングの非表示が完了したら呼ばれる。
func coachingOverlayViewDidRequestSessionReset(ARCoachingOverlayView)
//ARsessionはそもそもアプリを実行中ではないとトラッキングできない。セッションが中断すると中断前後でARオブジェクトが不自然にな場所に描画されてしまう。
//それを防ぐためにARSessionがrelocalization(リローカライズ)というの状態に入る。ここはARsessionが頑張ってくれているのでARオブジェクトを表示しない方が良い。(SessionInterruptionEndedのでコンテンツを非表示にすると良い)
//そのため同じ場所でアプリを開くとリローカライズさえ失敗しなければ同じARオブジェクトが表示される。
//ARCoachingOverlayViewのやり直しボタン(StartOver Button)を押すと,このDelegateメソッドが発火する。(ここでリローカライズで表示できていたARオブジェクトを非表示にできる)
- ARSessionの状態遷移
4 ARSessionの状態を自動表示を行うかを設定する
トラッキング状態が不十分だとコーチングを再描画するか否かを設定する。
coachingView.activatesAutomatically = true
5 認識させたい目的の設定。
ARCoachingOverlayViewにはgoalというプロパティが存在する。
実世界のどの部分をトラッキングすることを目的とするかを設定する
列挙型で4つの種類が存在する。
enum Goal {
case anyPlane
// どれでも床なら
case horizontalPlane
//水平面
case tracking
// 基本的なトラッキング設定
case verticalPlane
// 垂直面
case geoTracking
//正確な地理的位置
}
