Wayspot Anchor APIを使用する
VPS Wayspot Anchors を使用して、AR環境に一貫し、安定したポーズを維持する仮想オブジェクトを配置することができます。Wayspot Anchorsでは、VPSが作動しているWayspotやプライベートVPSロケーションから、現実世界におけるARコンテンツの位置を正確に特定することができます。また、Wayspot Anchorsを将来のVPSセッションで復元したり、アンカーをアプリのユーザー間で共有することもできます。Wayspot AnchorではVPSが作動したWayspotに対する位置や向きに関する情報を使用するため、GPS位置情報を使用するよりもはるかに高い精度で、配置する位置を設定できます。
Wayspot Anchorsは、VPSで作動したWayspotに関連する仮想コンテンツを配置し、共有する必要があるシナリオで使用します。シナリオの例としては、以下のようなものがあります。
配置と発見: VPSが作動したWayspot近辺にユーザーが仮想コンテンツを配置し、保持できるようにします。将来、本人や他のユーザーが、VPSを使用して配置されたオブジェクトを現実世界の同じ場所で見つけられるようにします。
オブジェクトの検出: 開発者やアプリのユーザーは、VPSが作動したWayspot近辺に現実世界の仮想オブジェクトを配置することができます。他のユーザーは、後に現実世界の同じ場所の近辺を移動しながら、これらのオブジェクトを検出できます。
共有オブジェクトによるインタラクション: VPSが作動した同一のWayspotに一緒にいるユーザーは、共有された仮想オブジェクトで同時にコラボレーションすることができます。
注釈
VPS Wayspot Anchorsは、ARPlaneAnchorやARImageAnchorなどのARDKのARアンカーと混同しないように注意してください。IARAnchorは、VPS Wayspot Anchorsとの互換性はありません。
Wayspot Anchorを配置するには、アプリが以下の状態であることを確認してください。
Wayspot Anchor APIを使って、ユーザーがローカライズしたVPSが有効なWayspotに対して、Wayspot Anchorsを配置できるようになります。
注釈
VPSローカライゼーションや、VPS Wayspot Anchors APIなどの機能を使用するには、エンドユーザーから個人情報を収集する必要があります。詳細については、 Lightship ARDKのデータプライバシーに関するよくある質問 をご参照ください。
基本フロー
Wayspot Anchor APIでは、新しいWayspot Anchorsの作成や配置だけでなく、以前に配置したWayspot Anchorsの復元を行うことができます。必要に応じて、VPSセッションでアンカーの作成と復元を組み合わせることができます。新しいアンカーを作成する基本フローは次のとおりです。
Wayspot Anchorを新規に作成し、配置する
VPS Wayspots Anchor APIからペイロードが返る。このペイロードは、後に復元または共有できるように保持することができます。
必要に応じて、アンカーを使用してGameObjectを配置する
Wayspots Anchor APIからAnchorトラッキングの更新情報を取得し、必要に応じてアンカーの位置のアップデートでGameObjectを調整する
Wayspot Anchorsを復元する基本フローは同様(アンカーの復元に、保持したペイロード情報を使用する点を除く):
注釈
ARDK 2.4では、作成と復元のレイテンシーが大幅に増加しました(最大300ミリ秒)。Wayspotの作成や復元を行う前に、APIの待機中にユーザーに表示すべき内容の有無を確認してください。
VPS Wayspot Anchor APIには、2つのインターフェイスが付属しています。 WayspotAnchorService は、Wayspot Anchorsを作成して管理するためのシンプルな「高レベル」APIであるのに対し、 WayspotAnchorController はよりきめ細かい制御が必要な場合に使用できる「低レベル」APIです。アプリで WayspotAnchorService
または WayspotAnchorController
を使用できますが、併用することはできません。 WayspotAnchorService
は WayspotAnchorController
の独自のインスタンスを作成して使用します。
WayspotAnchorService
と WayspotAnchorController
には、次のような違いがあります。
機能 |
|
|
---|---|---|
アンカーの作成 |
はい、 |
はい、独自のキャッシュで管理している |
アンカーの復元 |
はい、 |
はい、独自のキャッシュで管理している |
マネージドキャッシュからのアンカーの取得 |
はい |
いいえ、 |
マネージドキャッシュからのアンカーの削除 |
はい |
いいえ、 |
アンカーでのトラッキングの一時停止 |
いいえ |
はい |
一時停止中のアンカーでの追跡の再開 |
いいえ |
はい |
VPSと位置情報サービスの再起動 |
はい |
いいえ、これは |
VPSを停止する |
いいえ |
はい |
VPSを起動する |
いいえ、インスタンス初期化の一部として自動的に行われる |
はい |
WayspotAnchorService
を使用して、Wayspot Anchorsの作成や復元を行う方法については、 WayspotAnchorServiceを使用する をご参照ください。
WayspotAnchorController
を使用して、Wayspot Anchorsの作成や復元を行う方法については、 WayspotAnchorControllerを使用する をご参照ください。
アンカートラッキングの更新を処理する
VPSが有効なWayspotに対してユーザーが移動し、位置や向きを変えると、Lightship VPSは更新された環境を自動的に理解します。これにより、Lightship VPSでWayspot Anchorの位置や向きが補正されるため、Wayspot Anchorが現実世界の同じ位置に固定されます。Lightship VPSはこのような補正をアンカーの TransformUpdated イベント経由で送信します。
WayspotAnchorTracker はアンカーの位置や向きの更新を自動的に処理できる便利な拡張クラスです。このクラスは、Wayspot Anchorを作成または復元する場合に使用します。また、アンカーの位置や向きの更新を処理する方法をカスタマイズする必要がある場合は、このクラスを拡張(または置き換え)します。
次の例では、 WayspotAnchorTracker
を使用してプレハブ(_anchorPrefab
)をインスタンス化し、 WayspotAnchorTracker.AttachAnchor() を使用して作成または復元したWayspot Anchorに関連付けます。
using Niantic.ARDK.Extensions;
using Niantic.ARDK.AR.WayspotAnchors;
private GameObject CreateWayspotAnchorGameObject(IWayspotAnchor anchor, Vector3 position, Quaternion rotation, bool startActive)
{
var go = Instantiate(_anchorPrefab, position, rotation);
var tracker = go.GetComponent<WayspotAnchorTracker>();
if (tracker == null)
{
Debug.Log("Anchor prefab was missing WayspotAnchorTracker, so one will be added.");
tracker = go.AddComponent<WayspotAnchorTracker>();
}
tracker.gameObject.SetActive(startActive);
tracker.AttachAnchor(anchor);
// ...Add to a local cache of WayspotAnchorTrackers if needed...
return go;
}
Wayspot Anchorが WayspotAnchorTracker
にアタッチされると、 WayspotAnchorTracker
によって自動的に TransformUpdated
イベントが処理され、必要に応じてゲームオブジェクトの位置や向きが更新されます。アンカーの更新処理をカスタマイズする場合は、 WayspotAnchorTracker
から派生した独自のクラスでメソッドを上書きします。たとえば、アンカーに関連するゲームオブジェクトの位置や向きの変化をスムーズに補間したい場合は、 WayspotAnchorTracker
をサブクラス化して WayspotAnchorTracker.OnTransformUpdated()
を上書きし、スムージングを含む独自の実装を行うことができます。
WayspotAnchorTracker
を拡張する例については、 ARDK使用例 プロジェクト(WayspotAnchorsサンプルシーンの一部)の ColorChangingTracker
クラスをご参照ください。
WayspotAnchorTracker
を使用できない場合は、 TransformUpdated
のイベントハンドラを独自に設定します。イベントハンドラでは、 WayspotAnchorResolvedArgs.ID
パラメーターを使用して、更新後のアンカーIDを取得し、更新された IWayspotAnchor を判断します。
注釈
現時点では、セッションが正常にローカライズされる前にアンカーを復元することができます。復元されたアンカーは、セッションがローカライズされた時点ですぐに解決されません。セッションが正常にローカライズされると、復元されたアンカーはアンカーの位置や向きを解決し、 TransformUpdated
イベントが送信されるようになります。
Wayspot Anchorsの永続化と共有
Wayspot Anchorsを復元するには、Wayspot Anchorのペイロードを保持する必要があります。 WayspotAnchorPayload には、ペイロードデータをBase64文字列表現に変換するために使用できる便利な Serialize()
および Deserialize()
メソッドがあります。この文字列は、アプリやクラウドに保存したり、他のユーザーと共有したりできます。
Wayspot Anchorsとモックモード
Virtual StudioのモックモードでWayspot Anchorsの配置や復元を行うことができます。VPSで偽のローカライゼーションがシミュレートされ、モックモードでUnityエディターを使用して実行すると300ミリ秒後にローカライズされます。その後、 WayspotAnchorService
または WayspotAnchorController
を使ってWayspot Anchorsの配置や復元を行うと、Wayspot Anchors APIによって、自動的にこれらのアンカーに対してモックアンカーが実装されます。
モックアンカーで返るアンカーペイロードは、モックモード以外では使用しないでください。デバイス上で実行されている時にモックアンカーのペイロードを使用してアンカーを復元しようとすると、失敗します。同様に、モックモードでは現実世界で作成されたアンカーを復元できません。
モックモードで実行する方法の詳細については、 モックモードでのプレイ を参照してください。
Wayspot Anchorsのベストプラクティス
アンカーを配置する際、アプリでアンカーを受け取るまでに最大300ミリ秒の遅延が発生します。ユーザーがインタラクティブにアンカーを配置する場合、アンカーに関連するゲームオブジェクトは、返ったペイロードを待たずに、すぐにレンダリングすることをお勧めします。これによって、配置されたオブジェクトの表示の遅延を防ぐことができます。
Wayspot Anchorのデータの有効期限は現在6か月です。アンカーを最初に作成したときの時間を記録し、アンカーを復元するときにこの時間を確認する必要があります。6か月以上経過している場合は、アンカーの再作成を検討してください。