ARKitがWorldTrackingを確立するには、デバイスを動かして、ARKitに視点を与える必要があります。
ARCoachingOverlayViewでユーザーにガイダンスを出して、デバイスをうごかしてもらいます。
###1、ARCoachingOverlayViewを初期化します。
let coachingOverlay = ARCoachingOverlayView()
ARCoachingOverlayViewの設定
coachingOverlay.goal = .anyPlane //情報を取る目標設定
// 可能な値
case anyPlane
case horizontalPlane
case tracking
case verticalPlane
coachingOverlay.activatesAutomatically = true //Tracking状態が不十分になると、再度コーチングするか
// セッションとデリゲートを設定
coachingOverlay.session = sceneView.session
coachingOverlay.delegate = self
// Viewとして扱う
coachingOverlay.frame = sceneView.bounds
sceneView.addSubview(coachingOverlay)
###2、ARCoachingOverlayViewDelegateを設定
コーチングの状態によって呼ばれるDelegate functionは以下
func coachingOverlayViewWillActivate(_ coachingOverlayView: ARCoachingOverlayView) {
// コーチングが表示される前に呼ばれる。ここでコーチング中操作できないButtonなどを非表示にする。
}
func coachingOverlayViewDidDeactivate(_ coachingOverlayView: ARCoachingOverlayView) {
// コーチングが終了したあとに呼ばれる。ここでコーチング中操作できないButtonなどを再表示する。
}
これでARSessionをrunすると動くはずです。
必要な情報が得られたら、コーチングは消えます。
このステップをやったほうが、正確なワールドトラッキングが得られます。
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。
Twitter
[MLBoysチャンネル]
(https://www.youtube.com/channel/UCbHff-wfjTnB3rtXIP6y0xg)
Medium