これはレイアウト確認用のダミーテキストです。
UnityによるARでの屋内ナビゲーション
見出し

周囲の状況が見える場合、屋内でのナビゲーションが容易になります。グリッド上の点を見るだけでなく、状況に応じた情報が自分の視点に適合するように、空間内を自然に移動できます。
Maps SDK for Unityを使って、サンフランシスコのオフィスを拡張現実でナビゲートするアプリを作ったので、コードを共有します:

UnityでのMapboxの使用についてさらに詳しく学習するか、デモの構築方法についてお読みください。プロジェクトはこちらからダウンロードして、Unity 2017.2.0f3以降で開くことができます。次に、アクセストークンを設定し、ButtonSyncronizationWorldScalesceneを開きます。
このプロジェクトを3つのフェーズに分けました。
- Mapboxへ屋内地図データをインポート: フェーズ1では、オフィスの設計図のGeoTIFF画像をMapbox Studioにアップロードし、壁、部屋、廊下などのベクターフィーチャを含むデータセットを作成しました。
- Unity でのカスタムデータの利用: 第 2 フェーズでは、Unity で 3D マップをレンダリングし、部屋が実際の空間と 1:1 のスケールで配置されるようにしました。
- ワールドスケールARでローカライズされたものを見る:第3段階では、オフィススペースのローカライズされた3D機能を備えたシームレスな拡張現実ナビゲーションエクスペリエンスを作成しました。
フェーズ1:屋内地図のインポート
ベクターフィーチャを構築し、屋内地図データを追加するために、まずジオリファレンスされた画像をMapbox Studioに追加する必要がありました。その後、Unityでの利用を目的として設計されたカスタムプロパティとともに、壁、廊下、会議室のフィーチャをデータセットに追加しました。

必要な機能とプロパティを追加した後、そのデータをタイルセットにエクスポートし、Unityプロジェクトで使用しました。
フェーズ2:Unityでのレンダリング
タイルセットからフィーチャをレンダリングするために、RangeAroundTransformTileProviderを持つMapAtWorldScaleを使用しました。ARエクスペリエンスをサポートするために、地図を実世界のスケールでレンダリングしたかったため、MapAtWorldScaleを選択しました。RangeAroundTransformTileProviderは、ARカメラのルート変換を使用して、その周囲のタイルをロードします。レンダリングされたタイルには、データセットに追加したベクターデータ情報が含まれています。
会議室のレンダリングには、太陽系の惑星にちなんで名付けられた会議室の名前を惑星の3Dプレハブをインスタンス化するために、POI Modifierを使用しました。

さらに、高さとマテリアルの修飾子を使用して壁を押し出し、マスクされたシェーダーでレンダリングして、ARでオクルージョンを提供しました。

以下は、以下のフィーチャをレンダリングするために、モディファイアスタックをどのように設定したかの概要です。
1. 同期ポイント

SynchronizationPointsLocationProviderを利用して、同期ポイントに関連付けられた位置データを登録する、FixedLocationMonoBehaviorModifierという新しい修飾子を導入しました。登録プロセスでは、同期ポイントに対応する必要なUI要素が設定されます。
2. 目的地点

目的地のポイントを設定するために、SpawnPrefabModifierを使用しました。これはFixedLocationMonoBehaviorModifierのバリエーションであり、目的地のポイントを登録することに加えて、会議室を表すプレハブ(惑星の3Dモデル)も生成します。
3. ナビメッシュ
このデモでは、UnityのNavMeshを使用してナビゲーションパスを計算しています。NavMeshは、ナビゲーション可能なパスとして使用されるメッシュを入力として必要とします。このナビゲーション可能なパスを作成するために、同期と目的地の位置を結ぶ線形フィーチャをデータセットに追加しました。
ナビゲーションパスデータを利用するために、以下に示すようにモディファイアスタックを使用します。

フェーズ3:ワールドスケールARでのローカライズ
真の課題は、AR世界でのユーザーデバイスの位置特定、方向付け、追跡です。体験を開始する前に、Unityの3D機能が、デバイスの現実世界の位置と向きに完全に一致していることを確認する必要がありました。これを解決するために、AR世界が適切に配置され、方向付けられるのを見る前に、ユーザーが完了する必要のある2段階のプロセスを追加しました。
- 最初のステップでは、ユーザーは周囲のフロアをスキャンして、地面を検出する必要があります。
- 最初のステップを完了すると、アプリは異なる同期ポイントIDを示すUIを表示します。ユーザーは次に、同期ポイントまで歩いて、対応するボタンを押して、デバイスの位置と向きを基準にしてARマップを配置および方向付けする必要があります。
簡単に識別できるように、オフィス内の9つの場所に、データセットからの対応する同期ポイントIDをマークしました。以下の表は、これらの同期ポイントに追加したプロパティのセットを示しています。

3Dマップが調整されると、ユーザーがナビゲートできる目的地のリストが表示されます。次に、目的地に基づいて、アプリはNavMesh上に矢印のスプライトを連続的に配置して、選択した目的地への方向を示します。
将来の改善
このプロジェクトの主な目的は、Mapbox Studio の屋内地図データを提供し、Maps SDK for Unity を使用して AR で視覚化し、屋内環境で地図ベースのナビゲーションを実装する機能を利用することでした。そのため、デバイスの位置と向きを、ユーザー入力に依存する基本的な手動同期ステップと同期することに限定しました。
ただし、Bluetoothビーコンを使用すると、エクスペリエンスは大幅に向上します。ユーザーの位置と向きを継続的に追跡することにより、定期的な間隔で自動同期コンテキストが提供されます。また、屋内ナビゲーションと屋外ナビゲーション間のシームレスな移行も可能になり、幅広いユースケースに対応できます。

次のステップ
プロジェクトを試して、Twitterで#BuiltWithMapboxを使用して構築したものを教えてください。開始するには、ヘルプページのチュートリアルを参照し、位置情報ゲーム、AR、およびVRアプリケーションについて詳細をご覧ください。
これはレイアウト確認用のダミーテキストです。


%20(1).png)
.png)
