MRが楽しい

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

hololensでシェアリングを試してみる

本日早速、会社でシェアリングを試す機会があったので忘れないうちに復習しておきます。
試したのはHoloToolkitに含まれるHoloToolkit-Unity-Testsの「SharingTest」です。

最初に以下から最新版のHoloToolkitを取得します。
github.com

「SharingTest」の実施方法は以下を参照していきます。
github.com

因みにシェアリングのテストについて、以下の3つのテストシーンがあるようです。
・SharingTest.unity
 このテストでは、ネットワーキングに共有プレハブを使用し、カスタムメッセージをクライアントと共有する方法を示します。
 また、クライアント間でワールドアンカーを共有して共有スペースを確立する方法を示します。(by自動翻訳さん)
・RoomAndAnchorTest.unity
 このテストでは、アプリケーション内に新しい部屋とアンカーを作成する方法を示します。
 また、新しいアンカーをアップロードしてダウンロードする方法も示します。(by自動翻訳さん)
・SharingSpawnTest.unity
 このテストでは、シーン内およびネットワーク上のクライアント間で同期オブジェクトを生成および削除する方法を示します。
 (by自動翻訳さん)

今回は会社で試した「SharingTest.unity」を構築してみます。
まずダウンロードしたHoloToolkit-Unity-masterからAssets配下を全てインポートします。
f:id:bluebirdofoz:20170623035816j:plain

以降、手順ページに従って実施します。(by自動翻訳さん+追加補足)
 1.テストフォルダ(Assets/HoloToolkit-Unity-master/Assets/HoloToolkit-Tests/Sharing/Scenes)に移動します。
  f:id:bluebirdofoz:20170623035920j:plain
 2.探検したいテストシーン(SharingTest.unity)をダブルクリックします。シーンが読み込まれます。
  f:id:bluebirdofoz:20170623035932j:plain
 3.「File」- >「Build and Settings」をクリックして「BuildSettings」を開きます。
  f:id:bluebirdofoz:20170623035946j:plain
 4.「Add Open Scenes」をクリックしてシーンを追加します。以下の設定を行います。
  ・Platform - > Windows Store
  ・SDK - > Universal 10
  ・UWP Build Type - > D3D
  ・Unity C# Project をチェック
  f:id:bluebirdofoz:20170623040007j:plain
 5.「PlayerSettings」をクリックしてInspectorを開きます。
  「Windows Store」->「Publishing Settings」->「Capabilities」でシーンに必要な機能をすべて有効にします。
  以下の機能にチェックをしてください。
  ・SpatialPerception
  ・InternetClientServer
  ・PrivateNetworkClientServer
  ・Microphone
  f:id:bluebirdofoz:20170623040036j:plain
  「Windows Store」->「Other Settings」->「Virtual Reality Supported」に「Windows Holographic」を設定します。
  f:id:bluebirdofoz:20170623040026j:plain
 6.「Switch Platform」をクリックして設定を完了します。「Build」をクリックし、Appフォルダを作成します。 
  コンパイルが完了したら、ソリューションを開き、デバイスにデプロイします。
  f:id:bluebirdofoz:20170623040049j:plain

クライアント側のビルドはこれで完了です。
ただ、会社の先輩に教えてもらったところ、6/22現在ImportExportAnchorManager.csに不具合があるようです。

Unity5.6では、Awake関数からWorldAnchorstoreクラスのGetAsync関数を呼ぶと、NullReferenceExceptionになるので、Start関数から呼び出す必要があるそうです。
github.com

よってImportExportAnchorManager.csを以下の通り、修正しておきます。
・ImportExportAnchorManager.cs(修正前)

        protected override void Awake()
        {
            base.Awake();

#if UNITY_WSA && !UNITY_EDITOR
            // We need to get our local anchor store started up.
            currentState = ImportExportState.AnchorStore_Initializing;
            WorldAnchorStore.GetAsync(AnchorStoreReady);
#else
            currentState = ImportExportState.Ready;
#endif
        }

        private void Start()
        {
            // SharingStage should be valid at this point, but we may not be connected.
            if (SharingStage.Instance.IsConnected)
            {
                Connected();
            }
            else
            {
                SharingStage.Instance.SharingManagerConnected += Connected;
            }
        }

・ImportExportAnchorManager.cs(修正後)

        protected override void Awake()
        {
            base.Awake();
        }

        private void Start()
        {
#if UNITY_WSA && !UNITY_EDITOR
            // We need to get our local anchor store started up.
            currentState = ImportExportState.AnchorStore_Initializing;
            WorldAnchorStore.GetAsync(AnchorStoreReady);
#else
            currentState = ImportExportState.Ready;
#endif

            // SharingStage should be valid at this point, but we may not be connected.
            if (SharingStage.Instance.IsConnected)
            {
                Connected();
            }
            else
            {
                SharingStage.Instance.SharingManagerConnected += Connected;
            }
        }

これでクライアントアプリの準備が完了しました。


ついでに最新のHoloToolkitでサーバ側プログラムを用意しておきましょう。
先ほどのプロジェクトで「HoloToolkit」->「Sharing Service」->「Launch Sharing Service」をクリックします。
するとエラーが発生しました。サーバプログラムがないと怒っているようです。
f:id:bluebirdofoz:20170623040221j:plain

SharingService.exeは外部プログラムとして扱われるようになったようで、外部ディレクトリに準備してやる必要があります。
プロジェクトフォルダを開いて、HoloToolkit-Unity-masterからExternal配下を全てコピーします。
f:id:bluebirdofoz:20170623040246j:plain

もう一度「HoloToolkit」->「Sharing Service」->「Launch Sharing Service」をクリックしてみると……。
f:id:bluebirdofoz:20170623040256j:plain
SharingService.exeが起動しました。
このとき、コマンドプロンプトにはサーバのIPアドレスが表示されています。

クライアントアプリにサーバのIPアドレスを教えましょう。SharingオブジェクトのInspectorから設定可能です。
f:id:bluebirdofoz:20170623040310j:plain

SharingService.exeは起動したまま、ビルドを行い、hololensでアプリを起動してみると……。
f:id:bluebirdofoz:20170623040321j:plain
サーバへの接続が行われました。「Sucessfully uploaded anchor」が表示されていれば成功です。
アプリを複数台のhololensに展開して起動するとシェアリングが行えます。