ロケーションARとコードを一緒に使用する

この入門ガイドでは、以下の内容について説明します。
ARLocationManager
パブリック API を使ったARLocation
の管理と追跡- 登録されたARLocationに対する更新をリッスンする
- ARLocationを基準としてコンテンツを配置する
- ARセッション中にトラッキングされたARロケーションを切り替える
前提条件
- ARDKがインストールされたUnityプロジェクトと、セットアップされた基本的なARシーンが必要です。 詳しくは、ARDK 3のインストールおよび基本的なARシーンの設定を参照してください。
- APIキーを追加していない場合は、有効なAPIキーが必要です。
- この入門ガイドを進めるには、プロジェクトのARシーンに
ARLocationManager
が含まれている必要があります。ARLocationManager
とARLocation
をプロジェクトに追加する方法については、現実世界の場所をUnityに追加するのステップ4をご覧ください。 (ARLocationの交換では、複数のARLocation
が必要になります)。
トラッキングするARLocationを登録する
ARLocationManager
に ARLocation
を追加するには、 ARLocationManager
のSetARLocationsを呼び出して設定します。
このメソッドを呼び出すたびに、以前に設定されたロケーションはすべてクリアされます。 SetARLocations()
は、StartTracking()
を呼び出す前にのみ呼び出すことができる。 トラッキングする ARLocations
を設定したら、ARLocationManager
のStartTracking()を呼び出してトラッキングを開始します。
ARLocation
は同時に5つまで登録できるが、トラッキングに成功した最初の1つだけが更新を報告する。 同時に複数のロケーションをトラッキングしようとすると、トラッキングに必要なネットワーク帯域幅が増加します。 ユーザーの位置が明確である場合や、特定の位置をターゲットにしている場合は、トラッキングするARロケーションを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
という名前のブール値が含まれています。 複数のロケーションが登録されている場合、イベントは最初にトラッキングが開始された ARLocation
でのみ発生します。 それ以外の ARLocations
はすべて、追跡リストから自動的に削除されます。
クリックして、更新後のARLocationTrackingスクリプトを表示
using Niantic.Lightship.AR.LocationAR;
using UnityEngine;
using Niantic.Lightship.AR.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("最初のトラッキング更新を受信しました");
firstTrackingUpdateReceived = true;
}
trackedLocation.gameObject.SetActive(isTracking);
}
}
このスニペットでは、ARLocation
の GameObject
はトラッキング状態に応じて有効化または無効化されます。 これは、 ARLocation
の仮想コンテンツが正しくトラッキングされなくなった場合に、トラッキングの損失を処理し、ARカメラフィードからずれてしまう可能性がある場合に役立ちます。