コードによる位置情報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 カメラフィードからオフセットされた場合にトラッキングの損失を処理するのに便利です。