VPS
ARDKのVPS(ビジュアルポジショニングシステム)を使用して、現実世界の場所に仮想コンテンツを配置し、インタラクトする方法を示します。
VPSのコンテンツの例として、特注の「観光客」と「フロストフラワー」の2種類の体験と、StreetMapの概要をご紹介します。
使用中のARDK機能
ARMeshManager
- 環境メッシュの検出とそれに付随するコライダーを管理します。「フロストフラワー」における花の配置と動的シャドウに使用します。ARDepthManager
- 現実世界のオブジェクトを使用した仮想コンテンツの動的な深度オクルージョンを管理します。ARSemanticSegmentationManager
- 画像中の「空」や「地面」を含む部分を検出し、深度オクルージョンから除外します。
VPSマネージャーとヘルパー
VpsSceneManager
- VPSのすべてのステートや体験で共有されるロジックを処理します。VpsIntroManager
- エアシップのアニメーション付きのイントロシーケンスを管理します。VpsDebugManager
- VPSのステートに応じて、デバッグメニューのオプションを管理します。PhotoManager
- インスタント写真の合成や保存を管理します。VpsWayspotManager
-WayspotAnchorService
をラップし、ローカライズや、アンカーの配置や解決に関連するタスクを処理します。VpsCoverageManager
-ICoverageClient
をラップし、VPS Coverage API
へのクエリ実行や、得られた結果の保存を行います。
その他のマネージャーやヘルパー
AudioManger
- 世界空間、非空間、オブジェクト相対のオーディオを再生するためのユーティリティです。ErrorManager
- エラーメッセージを全画面表示するためのユーティリティです。
ユニバーサルステート
ステートマシンは、体験全体のフローを制御します。アプリは一度に1つステートにのみ遷移します。各ステートは、遷移する次のステートを動的に選択するようにオーサリングされています。
StateVpsIntro
Dotyのエアシップが登場するアニメーション付きのイントロシーケンスとUIの紹介パネルが表示されます。
このステートの後は、VpsStreetMap ステートに遷移します。StreetMapステートのセクションを参照してください。
StateVpsARWarning
ユーザーがセッションのARに初めて入ると、ARの使用に関する警告文がGUI表示されます。
StateVpsLocalization
カメラとARセッションが、ARDKのメッシングとともに起動されます。ユーザーは、VPS Wayspotの「ヒント」画像をビューポートにフレーミングすることで、ローカライズを行うように求められます。ローカライズプロセス中は、特徴点の視覚化によって、プロセスが実行されていることがユーザーにフィードバックされ、ローカライズの方法を示すヒントが表示されます。
StateVpsLocalizationは VpsWayspotManager
を使用して、ARDKの WayspotAnchorService
を起動し、その LocalizationState
の更新を監視します。
ローカライズに失敗すると、ローカライズに失敗したことがユーザーに通知され、システムで自動的に再試行されます。ローカライズに成功すると、 VpsWayspotManager
を使用して現在の VpsDataEntry
に関連付けられた WayspotAnchorPayloads
を PersistentWayspotAnchorPayloadLookup
内に復元します。 VpsWayspotManager
はこのルックアップを使用して、ローカライズのターゲット識別子ごとにアンカーペイロードデータのシリアライズされたjsonファイルを維持します。すべてのアンカーが正常に復元されると、ユーザーがStreetMap上で選択したVPS Wayspotの性質に応じて、アプリケーションは StateVpsBespoke または StateVpsFrostFlower に遷移します。Wayspot Anchorが正しく復元されないと、ローカライズの失敗として扱われます。その結果、ユーザーに報告され、システムで自動的にローカライズプロセスが再開されます。
StateVpsLocalizationDestabilized
VpsWayspotManager
で、 WayspotAnchorService
の LocalizationState
が Localized
から変化したことを検出すると実行されます。たとえば、アプリでカメラを追跡できなくなった場合や、アプリのフォーカスを失った場合に発生します。コンテンツを表示するステートはいずれも、 VpsWayspotManager
の LocalizationDestabilized
イベントを監視し、このステートに遷移します。ローカライズが不安定になると、ローカライズ済みのインスタンス化されたコンテンツはすべて破棄されます。
StateVpsTakePhoto
Dotyやフロストフラワーを使用した特定のAR体験時に、体験のスナップショットを撮影するためのファインダーやフォトボタンを表示しながら、(必要に応じて)体験を行うステートです。
StateVpsViewPhoto
DotyやFlost Flowersの写真がインタラクティブ表示されます。
StreetMap
Mapbox Unity SDK上に構築された、付近のVPSロケーション、またはVPSロケーションのクラスターを示すインタラクティブなストリートマップを表示します。
このインタラクティブなストリートマップでは、ユーザーの現在位置と、付近のロケーションやロケーションクラスターのマーカーアイコンが表示されます。マーカーのデータは、 VpsCoverageManager
によって VPS Coverage API
から取得されます。クエリを実行しても結果が返らない場合、ユーザーは既知のWayspotを含むロケーションを訪問することができます。
Coverage APIのクエリ
VpsCoverageManager
を使用した検索クエリは、2段階で構成されます。まず、 RequestCoverageAreasAsync
を呼び出すと、それぞれに一つ以上の LocalizationTargetIdentifiers
が格納された、 CoverageAreas
のリストが返ります。その後、識別子のリストは、 RequestLocalizationTargetsAsync
の呼び出しに使用され、個々のロケーションに関する詳細な情報(名前、座標など)が返ります。新しいロケーションはそれぞれ、 VpsDataEntry
にラップされ、キャッシュされ、マップ上にマーカーアイコンを描画するために使用されます。
すでにキャッシュされているロケーション(以前の検索結果、またはフロストフラワーや特注のロケーションの内部リストの一部として取得したもの)に対して RequestCoverageAreasAsync
を呼び出すと、 RequestLocalizationTargetsAsync
を再度呼び出さなくても直接返るようになります。
個々のロケーション
マップを十分に拡大すると、個々のロケーションのマーカーアイコンが表示されます。プレイヤーは、個々のロケーションをタップして、そのロケーションのヒント画像などの関連情報を確認できます。この情報は、 VPS Coverage API
から返るURLからアクセスできます。また、そのロケーションにローカライズできるほど近くにいる場合は、ARでローカライズのプロセスを開始してから、そのロケーションでAR体験をプレイすることができます。最新バージョンのAR Voyageでは、ロケーションでローカライズするには、ユーザーが15m以内にいる必要があります。ただし、GPSの精度が低い場合があるため、ユーザーが30m以内に30秒間いれば、「GPSをバイパス」してローカライズに進むことができます。高品質なローカライズを行うには、できるだけローカライズ対象のロケーションの付近にいることをお勧めします。ARDKでローカライズするには、ターゲットから50m以内にいる必要があります。
ロケーションクラスター
マップを十分に拡大すると、(特定の検索範囲にある)ロケーションのクラスターがマーカーアイコンで表示され、含まれるロケーションのタイプや数が示されます。
クラスタリングは、パブリックドメインのジオコードシステムであるGeohashに基づいて行われます。
StreetMapのマネージャーとヘルパー
StreetMapManager
- マップビューでのナビゲーションに関する機能を管理します。StreetMapMarkerManager
- ユーザーのアバターマーカーや、ロケーション、ロケーションクラスターのマーカーの表示を管理します。
StreetMapステート
StateVpsStreetMap
StreetMapManagerにメソッドを呼び出して、インタラクティブなStreetMapを起動し、指示します。
このステートの後は通常、StateVpsLocalization ステートに遷移します。ユニバーサルステートのセクションを参照してください。
特注の「観光客」体験
特定のVPSロケーション向けにオーサリングされたロケーション固有のカスタムコンテンツを表します。
サンフランシスコのベイエリアにあるVPSの一部のロケーションは、プレイヤーがDotyと交流し、そのロケーション特有のアクションを撮影することができる特注の「観光地」としてオーサリングされています。
これらのロケーションのデータは VpsCoverageManager
で登録されたスクリプト可能なオブジェクトに格納され、そのカスタムコンテンツはアプリケーションのソースに含まれる WayspotAnchorPayloads
を使用して、ローカライズプロセスの一部としてインスタンス化されます。
オーサリングされている「観光客」のロケーションは次のとおりです。
ドラゴンゲート - Dotyはライオンの像と並んでポーズをとります。
キューピッドの弓 - Dotyはアーチェリーの練習をします。
ガンジー記念碑 - Dotyはエアシップで到着し、派手に登場します。
Pier 14 - DotyはPier 14で釣り糸を投げ、思いがけない釣果を上げます。
ウィリー・メイズ像 - Dotyは、ウィリー・メイズ像の前で、フェンスに向かってスイングします。
Bespoke States (特注ステート)
StateVpsBespoke
選択したWayspotに基づいて、適切なカスタムコンテンツをインスタンス化します。
StateVpsBespokeGuideToDoty
プレイヤーが体験を表示する位置情報の目安となるマーカーと矢印をアニメーション表示します。
StateVpsBespokeOfferCamera
Dotyがプレイヤーの位置を動的に追いながらインスタントカメラを提供するアニメーションシーケンスがループ表示されます。
このステートの後は、ユニバーサルステートである TakePhoto や ViewPhoto に連続遷移し、Dotyはそのロケーション固有のカスタム動作を行います。
StateVpsBespokeBadgeUnlocked
「観光客」バッジのロック解除メッセージを表示します。
StateBespokePlantFlag
Dotyはこのロケーションに旗を立て、出発します。
フロストフラワー体験
一般的なVPSロケーションで、ユーザーによって動的に配置されたコンテンツの保存と復元を行う方法を示します。
一般的なVPSロケーション(「特注」の観光客コンテンツが存在しない多くのロケーション)では、プレイヤーは種をまいて「フロストフラワー」に育てることができます。初回訪問時に栽培した花はすぐに大きな花「スーパーブルーム」に成長します。これは、次回訪問時に鑑賞することができます。
種まき
ローカライズの後、プレイヤーは、目に見えない AR Mesh
オブジェクト( ARMeshManager
で指定)にレティクルをターゲティングして発射ボタンを押すことで、種を植えることができます。衝撃が起きると、 VpsWayspotManager
が呼び出され、インスタンス化された「ヒーロー」の変身によって WayspotAnchor
が配置されます。アンカーが作成されると、ヒーローフラワーの変身が自動的にアンカーの子になり、ARDKからアンカーのポーズ更新を受け取ることができるようになります。その後のプロセスでは、他の植物や草の成長点を見つけるために AR Mesh
に向かってレイキャスティングを開始します。
保存
3つ目の種をまくことに成功すると、それぞれの花の WayspotAnchorPayload
がシリアライズされ、デバイスにローカル保存されます。
ロード
その後、あるロケーションを訪れると、既存の WayspotAnchors
がデシリアライズされ、上記のローカライゼーションプロセスの一部として解決されます。その後、新しい「ヒーロー」フラワーともう1つの葉がその位置で再び成長します。
FrostFlowerマネージャー
FrostFlowerManager
は、ターゲティングや種まき、関連するアニメーションや視覚効果など、大部分を処理します。また、ユーザーが特定の場所を訪れる間に、フロストフラワーのデータの保存や読み込みの処理も行います。
FrostFlowerステート
StateVpsFrostFlower
最初に訪れたロケーションで、種をまいてフロストフラワーを育てるためのインターフェイスが表示されます。その後、種をまくと、大きな花が咲き、さらに多くの葉がついた状態で表示されます。
このステートに続き、次にこのロケーションを訪れると、ユニバーサルステートである TakePhoto や ViewPhoto に遷移し、「収穫」されたフロストフラワー「スーパーブルーム」の写真を撮影できるようになります。
StateVpsFrostFlowerBadgeUnlocked
「スーパーブルーム」バッジのロック解除メッセージが表示されます。
StateVpsFrostFlowerSuccess
最終的な成功メッセージが表示されます。