MRが楽しい

MRやVRについて学習したことを書き残す

公式チュートリアルの「Multi-user capabilities tutorials」を試す その3

本日は HoloLens2 の公式チュートリアルの実施枠です。
バイス間でのシェアリングを Photon を用いて実現するチュートリアル「Mult-user capabilities tutorials」を試します。

以下の公式ページの和訳と実施キャプチャを元に記事を書き起こします。
docs.microsoft.com

前回記事の続きです。
bluebirdofoz.hatenablog.com

5. Azure SpatialAnchorsを共有エクスペリエンスに統合する

この章では、Azure Spatial Anchors(ASA)を共有体験に統合する方法を学習します。
ASA を使用すると、複数のデバイスが物理的な世界を共通に参照できます。
このため、ユーザーは実際の物理的な場所でお互いを確認し、同じ場所で共有体験を確認できます。

目的

この章では以下の技術を学びます。

・共有エクスペリエンスに ASA を統合する方法
・ローカル共有体験のコンテキストでASAがどのように機能するか

シーンの準備

[Hierarchy]ウィンドウで、[SharedPlayground]オブジェクトを展開し、次に[TableAnchor]オブジェクトを展開します。
f:id:bluebirdofoz:20201015205417j:plain

プロジェクトウィンドウで、Assets/MRTK.Tutorials.MultiUserCapabilities/Prefabs を開きます。
[TableAnchor]オブジェクトの子オブジェクトとして、[Buttons]プレハブをドラッグしてシーンに追加します。
f:id:bluebirdofoz:20201015205427j:plain

シーンを操作するためのボタンの構成

Azure Spatial Anchors を使用して、共有体験で空間配置を実現する方法の基本を示す一連のボタンイベントを構成します。

[Hierarchy]ウィンドウで、[Button]オブジェクトを展開します。
[StartAzureSession]という名前の最初の子ボタンオブジェクトを選択します。
f:id:bluebirdofoz:20201015205439j:plain

[Inspector]ウィンドウで、Interactable (Script) コンポーネントを見つけ、以下のように OnClick() イベントを構成します。

・[None (Object)]フィールドに[TableAnchor]オブジェクトを割り当てます
・[No Function]ドロップダウンから[AnchorModuleScript -> StartAzureSession()]関数を選択します
f:id:bluebirdofoz:20201015205448j:plain

[Hierarchy]ウィンドウで、[CreateAzureAnchor]という名前の2番目の子ボタンオブジェクトを選択します。
[Inspector]ウィンドウで、Interactable(Script)コンポーネントを見つけて OnClick() イベントを以下のように構成します。

・[None (Object)]フィールドに[TableAnchor]オブジェクトを割り当てます。
・[No Function]ドロップダウンから[AnchorModuleScript -> CreateAzureAnchor()]関数を選択します
・表示される[None (Game Object)]フィールドに[TableAnchor]オブジェクトを割り当てます
f:id:bluebirdofoz:20201015205459j:plain

[Hierarchy]ウィンドウで、[ShareAzureAnchor]という名前の3番目の子ボタンオブジェクトを選択します。
[Inspector]ウィンドウで、Interactable(Script)コンポーネントを見つけて OnClick() イベントを以下のように構成します。

・[None (Object)]フィールドに[TableAnchor]オブジェクトを割り当てます
・[No Function]ドロップダウンから[SharingModuleScript -> ShareAzureAnchor()]関数を選択します
f:id:bluebirdofoz:20201015205601j:plain

[Hierarchy]ウィンドウで、[GetAzureAnchor]という名前の4番目の子ボタンオブジェクトを選択します。
[Inspector]ウィンドウで、Interactable(Script)コンポーネントを見つけて OnClick() イベントを以下のように構成します。

・[None (Object)]フィールドに[TableAnchor]オブジェクトを割り当てます
・[No Function]ドロップダウンから[SharingModuleScript -> GetAzureAnchor()]関数を選択します
f:id:bluebirdofoz:20201015205613j:plain

シーンをAzureリソースに接続する

[Hierarchy]ウィンドウで、[SharedPlayground]オブジェクトを展開して[TableAnchor]オブジェクトを選択します。
f:id:bluebirdofoz:20201015205623j:plain

[Inspector]ウィンドウで、Spatial Anchor Manager(Script)コンポーネントを開きます。
Azure Spatial Anchors アカウントの資格情報を使用して[Credentials]セクションを以下のように構成します。

・[Spatial Anchors Account ID]フィールドに、Azure Spatial Anchors アカウントのアカウントIDを貼り付けます
・[Spatial Anchors Account Key]フィールドに、Azure Spatia lAnchors アカウントから主キーまたはセカンダリキーを貼り付けます。
f:id:bluebirdofoz:20201015205640j:plain

ヒント

シーンに空間アンカーアカウントIDとキーを設定する代わりに、プロジェクト全体に設定することもできます。
これは ASA を使用する複数のシーンがある場合に役立ちます。
これを利用するにはプロジェクトウィンドウで、Assets/AzureSpatialAnchors.SDK/Resources を開きます。
[SpatialAnchorConfig]の[Inspector]ウィンドウを開き、設定を行います。
f:id:bluebirdofoz:20201015205650j:plain

[Hierarchy]ウィンドウで[TableAnchor]オブジェクトを選択します。
[Inspector]ウィンドウで Anchor Module (Script) コンポーネントを見つけて、以下のように構成します。

・[Public Sharing Pin]フィールドで、Pin がプロジェクトに固有になるように値を変更します
f:id:bluebirdofoz:20201015205701j:plain

[TableAnchor]のオブジェクトを選択したまま、[Inspetor]ウィンドウから以下のように構成します。

・Spatial Anchor Manager(Script)コンポーネントの横にあるチェックボックスをオンにして有効にします。
・Anchor Module Script (Script) コンポーネントの横にあるチェックボックスをオンにして、有効にします
・Sharing Module Script (Script) コンポーネントの横にあるチェックボックスをオンにして、有効にします
f:id:bluebirdofoz:20201015205713j:plain

・空間配置を試す

Unity プロジェクトをビルドして2つのデバイスにデプロイする場合、Azure Anchor ID を共有することで、デバイス間の空間的な配置を実現できます。
テストするには、次の手順に従います。

1

バイス1側でアプリを起動します
Rover Explorerインスタンス化され、テーブルに配置されます。
f:id:bluebirdofoz:20201015205724j:plain

2

バイス2側でアプリを起動します。
バイス1と同じルームに入室できていれば[Debug Window]に「Total players in room: 2」と表示されます。
ただし Rover Explorer は同じ場所に表示されず、ユーザーのアバターも現実のユーザー位置に表示されません。
f:id:bluebirdofoz:20201015205734j:plain

3

バイス間の空間配置の共有を行うため、デバイス1側で[Start Azure Session]ボタンを押します。
成功すると[Debug Window]に「Azure session started successfully」と表示されます。
f:id:bluebirdofoz:20201015205745j:plain

4

バイス1側で[Create Azure Anchor]ボタンを押します。
プロジェクトは TableAnchor オブジェクトの場所にアンカーを作成します。
成功すると[Debug Window]に「Current Azure anchor ID updated to .....」と表示されます。
f:id:bluebirdofoz:20201015205756j:plain

5

バイス1側で[Share Azure Anchor]ボタンを押します。
アンカー情報を Azure リソースに格納し、アンカーIDを他のユーザーとリアルタイムで共有します。
成功すると[Debug Window]に「Azure Anchor ID shared by user: .....」と表示されます。
f:id:bluebirdofoz:20201015205809j:plain

6

バイス2側で[Start Azure Session]ボタンを押します。
成功すると[Debug Window]に「Azure session started successfully」と表示されます。
f:id:bluebirdofoz:20201015205820j:plain

7

バイス2側で[Get Azure Anchor]ボタンを押します。
Azure リソースに接続して共有アンカーIDのアンカー情報を取得します。
成功すると[Debug Window]に「Loading for Zzure anchor... please wait...」と表示されます。
f:id:bluebirdofoz:20201015205832j:plain

8

バイス1で作成したアンカー空間が検出されると TableAnchor オブジェクトがその場所に移動します。
成功すると[Debug Window]に「Local anchor position successfully set to Azure anchor position」と表示されます。
空間配置が共通化されたため、Rover Explorer の位置やアバターと現実のユーザーの位置が一致するようになります。
f:id:bluebirdofoz:20201015205843j:plain

注意

Azure SpatialAnchors は Unity では実行できません。
よって、Azure Spatial Anchors の機能をテストするには少なくとも2つのデバイスにデプロイする必要があります。

2020/10/12特記

2020/10/12現在、以下のページから取得した AzureSpatialAnchors.unitypackage の SDK を利用した場合、[Create Azure Anchor]実行時に CloudSpatialException が発生し、正常に動作しませんでした。
docs.microsoft.com

本記事では、事前に動作した「Create a Unity HoloLens app that uses Azure Spatial Anchors」チュートリアル側の SDK を利用する事で回避しました。
bluebirdofoz.hatenablog.com

以下のフォルダのファイルを書き換える事で差し替えることができます。
・「Create a Unity HoloLens app that uses Azure Spatial Anchors」側のSDK(取得元)

Packages/AzureSpatialAnchorsSDKCore/Runtime/Scripts:スクリプトフォルダ
Assets/AzureSpatialAnchors.SDK/Resources:リソースフォルダ

・「Multi-user capabilities tutorials」側のSDK(書き換え先)

Assets/AzureSpatialAnchors.SDK/Scripts:スクリプトフォルダ
Assets/AzureSpatialAnchors.SDK/Resources:リソースフォルダ

f:id:bluebirdofoz:20201015205924j:plain