NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

HoloLensをUNETで接続する(サンプル実行編)

こんにちは。
コンサルティング&テクノロジー部の酒井です。
最近、HoloLensと戯れていても変な目で見られなくなりました。

2台以上のHoloLensが集まれば、一度はやってみたいのがSharingです。
Sharingを行うアプリを作るには、主に3つのパターンのどれかを使うかと思います。

  1. MixedRealityToolkitに含まれるSharing機能を使う
  2. UNETやPhotonといったネットワーキングエンジンを使う
  3. TCP/UDPで独自に実装する

このうち、1.と2.はMixedRealityToolkitにサンプルが含まれていて、お手軽に試することができます。
今回は、別途サーバーが不要でHoloLensが2台あれば(むしろこちらの条件が難しいかもしれません)試せる、2.のUNETを使ったサンプルを実行する方法を解説します。

この記事はネクストスケープ クラウド事業本部 Advent Calendar 2017の3日目です。

完了イメージ

 

対象環境は
  Unity2017.1.2p2
  Visual Studio 2017
です。

また、事前に下記のものを準備しておいてください
  MRToolkit(HoloToolkit)のリリースページから下記のファイルをダウンロード
    HoloToolkit-Unity-v1.2017.2.0.unitypackage
  HoloLens 2台

まずはUnityでプロジェクトを作成し、ダウンロードしたパッケージをインポートします。

f:id:nextscape_blog:20210911001006p:plain

続いて、サンプルのシーン(SharingWithUnetExample)を開きます。
対象のシーンは「HoloToolkit/SharingWithUNET/Scene」にあります。

f:id:nextscape_blog:20210911001026p:plain

シーンを開いたら、プロジェクト設定を行います。

エディタのメニューからMixedRealityToolkit→Configure→Apply Mixed Reality Project Settings を選択し、デフォルトでチェックの入っている項目(下記画像を参照)のままApplyします。また、同じメニューのApply UWP Capability Settingsを開き、「Spatial Perception」、「Internet Client Server」、「Private Network Client Server」にチェックを入れてApplyします。 

 

f:id:nextscape_blog:20210911001053p:plain f:id:nextscape_blog:20210911001239p:plain

このバージョンではPlayer設定も一部変更が必要です。Edit→Project Settings→Playerを開き、Other SettingsのVirtual

このバージョンではPlayer設定も一部変更が必要です。Edit→Project Settings→Playerを開き、Other SettingsのVirtual Reality SDKsからWindows MRを削除し、代わりにWindows Holographicを追加します。

f:id:nextscape_blog:20210911001305p:plain f:id:nextscape_blog:20210911001335p:plain

 

さらに、Unity2017.1系でビルドする場合はStartボタンの実装に問題があり、Hololens上でタップしても反応しません。
このため、「HoloToolkit/SharingWithUNET/UI/Scripts/StartSessionButton」のスクリプトのコードを下記のように修正します。


        // 省略

        public void OnInputClicked(InputClickedEventData eventData)
        {
            if (networkDiscovery.running)
            {
                // Only let HoloLens host
                // We are also allowing the editor to host for testing purposes, but shared anchors
                // will currently not work in this mode.

                if (
#if UNITY_WSA && UNITY_2017_2_OR_NEWER
                    !UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque
// この部分を追加
#else
                    true
// 追加部分終了
#endif
// この部分を変更
//                  Application.isEditor)
                    )
// 変更部分終了
                {
                    if (Application.isEditor)
                    {
                        Debug.Log("Unity editor can host, but World Anchors will not be shared");
                    }

                    networkDiscovery.StartHosting("DefaultName");
                    eventData.Use();
                }
            }
        }
        // 省略

その後は、通常通りUnityでBuild、VisualStudioでデプロイすればアプリが実行できます。

起動後にメニューが表示されますので、「Start」ボタンをタップするとその端末がHostになります。
2台目以降はリストにHostが表示されますので、一度タップして選択した後に「Join」ボタンをタップします。

接続すると他の端末が四角のボックスで表示され、AirTapすることで弾(?)を発射し、それが他のHoloLensにも共有されます。
もし、端末間で弾の位置がずれる場合はHoloLens間の空間認識がずれているので、マップを作り直すとよいでしょう。