コードによる位置情報ARの使い方

このHow-toガイドでは、以下の内容について説明します。
ARLocationManagerパブリック API を使ったARLocationの管理と追跡- 登録されたARLocationsの更新をリスンする
- ARLocationからの相対的なコンテンツの配置
- ARセッション中に追跡されたARLocationを交換する
前提条件
- ARDK がインストールされたUnityプロジェクトと、セットアップされた基本的な AR シーンが必要です。 詳しくは、ARDK 3のセットアップおよびARシーンのセットアップを参照してください。
- APIキーを追加していない場合は、有効なAPIキーが必要です。
- このHow-Toを使用するには、プロジェクトのARシーンに
ARLocationManagerが必要です。 プロジェクトにARLocationManagerとARLocationを追加する方法については、Unity にリアルワールドのロケーションを追加する のステップ 4 を参照してください。 (ARLocationの交換では、複数のARLocationが必要になります)。
追跡するARLocationの登録
ARLocationManagerにARLocationを追加するには、ARLocationManagerのSetARLocationsを呼び出して設定します。
これが呼ばれるたびに、以前に設定されたロケーションはすべてクリアされる。 SetARLocations()は、StartTracking()を呼び出す前にのみ呼び出すことができる。 トラッキングする ARLocation を設定したら、ARLocationManagerの StartTracking() をコールしてトラッキングを開始します。
トラッキングを開始するには、ARLocationManagerのStartTracking() を呼び出します。
ARLocationは同時に5つまで登録できるが、トラッキングに成功した最初の1つだけが更新を報告する。 複数の場所を同時に追跡しようとすると、追跡のためのネットワーク帯域幅の使用量も増加する。 ユーザーがどこにいるかわかっている場合、またはトラッキングの対象としている場所がある場合、トラッキングするARLocationを1つだけ登録することを推奨します。 トラッキングの対象が明確でない場合は、複数のロケーションを登録すると便利です。
using Niantic.Lightship.AR.LocationAR;
using UnityEngine;
public class ARLocationTracking : MonoBehaviour
{
[SerializeField]
private ARLocationManager ArLocationManager;
[SerializeField]
private ARLocation[] ArLocations;
public void StartTracking()
{
ArLocationManager.SetARLocations(ArLocations);
ArLocationManager.StartTracking();
}.
}
登録されたARLocationの更新をリスニングする
登録された ARLocations の更新を受信して処理するには、locationTrackingStateChanged を購読します。
イベントの引数には、更新された ARLocation と、現在のトラッキング状態を報告する Tracking という bool が含まれる。 複数のロケーションが登録されている場合、最初にトラッキングされた ARLocation だけがイベントを発生します。 その他のARLocationsは自動的に追跡リストから削除されます。
クリックすると更新されたARLocationTrackingスクリプトが表示されます。
using Niantic.Lightship.AR.LocationAR;
using UnityEngine;
using Niantic.Lightship.AR.PersistentAnchors; public class ARLocationTrack : MonoBehavour.PersistentAnchors;
public class ARLocationTracking : MonoBehaviour
{
[SerializeField]
private ARLocationManager ArLocationManager;
[SerializeField]
private ARLocation[] ArLocations;
private bool firstTrackingUpdateReceived = false;
public void StartTracking()
{
ArLocationManager.locationTrackingStateChanged += OnLocationTrackingStateChanged;
ArLocationManager.SetARLocations(ArLocations);
ArLocationManager.StartTracking();
}
private void OnLocationTrackingStateChanged(ARLocationTrackedEventArgs args)
{
var trackedLocation = args.ARLocation;
var isTracking = args.Tracking;
if (!firstTrackingUpdateReceived && isTracking){
Debug.Log("First tracking update received");
firstTrackingUpdateReceived = true;
}
trackedLocation.gameObject.SetActive(isTracking);
}.
}
このスニペットでは、ARLocation GameObject はトラッキングの状態によって有効、無効になります。 これは ARLocation 仮想コンテンツが正しくトラッキングできなくなり、AR カメラフィードからオフセットされた場合にトラッキングの損失を処理するのに便利です。