こんにちは。
コンサルティング&テクノロジー部の酒井です。
最近、HoloLensと戯れていても変な目で見られなくなりました。
2台以上のHoloLensが集まれば、一度はやってみたいのがSharingです。
Sharingを行うアプリを作るには、主に3つのパターンのどれかを使うかと思います。
- MixedRealityToolkitに含まれるSharing機能を使う
- UNETやPhotonといったネットワーキングエンジンを使う
- 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でプロジェクトを作成し、ダウンロードしたパッケージをインポートします。
続いて、サンプルのシーン(SharingWithUnetExample)を開きます。
対象のシーンは「HoloToolkit/SharingWithUNET/Scene」にあります。
シーンを開いたら、プロジェクト設定を行います。
エディタのメニューからMixedRealityToolkit→Configure→Apply Mixed Reality Project Settings を選択し、デフォルトでチェックの入っている項目(下記画像を参照)のままApplyします。また、同じメニューのApply UWP Capability Settingsを開き、「Spatial Perception」、「Internet Client Server」、「Private Network Client Server」にチェックを入れてApplyします。
このバージョンではPlayer設定も一部変更が必要です。Edit→Project Settings→Playerを開き、Other SettingsのVirtual
このバージョンではPlayer設定も一部変更が必要です。Edit→Project Settings→Playerを開き、Other SettingsのVirtual Reality SDKsからWindows MRを削除し、代わりにWindows Holographicを追加します。
さらに、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間の空間認識がずれているので、マップを作り直すとよいでしょう。