0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ARKit] ARCoachingOverlayViewを表示する。

Last updated at Posted at 2022-04-23

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の状態遷移 

スクリーンショット 2022-04-23 21.40.09.png

4 ARSessionの状態を自動表示を行うかを設定する
トラッキング状態が不十分だとコーチングを再描画するか否かを設定する。

coachingView.activatesAutomatically = true

5 認識させたい目的の設定。

ARCoachingOverlayViewにはgoalというプロパティが存在する。
実世界のどの部分をトラッキングすることを目的とするかを設定する
列挙型で4つの種類が存在する。

enum Goal {
 case anyPlane
 // どれでも床なら
case horizontalPlane
//水平面
case tracking
// 基本的なトラッキング設定
case verticalPlane
// 垂直面
case geoTracking
 //正確な地理的位置
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?