Help us understand the problem. What is going on with this article?

HoloLens 2 公式チュートリアル「Mult-user capabilities tutorials」を試してみた [前編]

はじめに

今回は Microsoft 公式 HoloLens 2 チュートリアル Multi-user capabilities tutorials の手順に沿って、複数デバイス間でのシェアリング機能の実装方法について検証を行っていきたいと思います。チュートリアルの手順は大きく4つに分かれており、それぞれのステップで段階的に Photon を用いたシェアリング実装法について紹介されています。Photon とは、Unity上でマルチデバイス間のシェアリング機能を実装するための ネットワーキングフレームワーク ( SDK ) です。

チュートリアルの全容を一つの記事で紹介するとかなり長くなるので、本記事では前編・後編に2つに分けてご紹介したいと思います。

MRTK v2.4 がリリースされる前に書き始めたので、この記事では MRTK v2.3 を使用しています。

[2020/06/18 追記]
後編記事書きました。本記事の続きは、「HoloLens 2 公式チュートリアル「Mult-user capabilities tutorials」を試してみた [後編]」をご覧ください。

検証環境

  • 開発用PC ( Windows 10 Pro )
    • Windows 10 SDK ( 10.0.18362.0 )
    • Unity 2019.2.21f1
    • Unity モジュール : ユニバーサル Windows プラットフォームビルドサポートモジュール
    • Unity モジュール : IL2CPP ビルドサポートモジュール
    • AR Foundation 2.0.2 ( Package Manager )
    • PUN2 - FREE ( Pun : 2.18.1 / Photon lib : 4.1.4.1 )
    • Visual Studio 2019 ( Version : 16.6.1 )
  • Microsoft HoloLens 2

公式ドキュメントには、「Windows 10 SDK 10.0.18362 or later」 と表記がありますが、開発環境によっては 10.0.19041.0 を使用することで下記サイトと同様のエラーが発生するので注意が必要です。
"Failed to connect to server after testing each known IP." on Universal Windows Platform

このエラーの原因は、Visual Studio 2019 でのビルド時に Windows 10 SDK バージョン 10.0.19041 の .dll 関連のエラーが発生していることです。 ( 下図 : Visual Studio でのデバッグ画面 )

私の場合、Visual Studio 2019 のプロパティ設定 [Target Platform Version] が、10.0.18362.0 になっているにも関わらず同様のエラーが発生したので、Unity から Export されたプロジェクト内にSDKバージョンの記載があることに気が付きました。この問題の回避策としては、以下対策が考えられます。

Visual Studio 2019 にて Windows 10 SDK 10.0.19041.0 をインストール済みの場合は、Unity の Build Settings > [ Target SDK Version ] にて、「Latest Installed」ではなく、「10.0.18362.0」を選択するようにしてください。

公式ドキュメントのシステム要件は、こちらをご確認ください。

公式チュートリアルの手順

それでは、早速チュートリアルを進めていきましょう。チュートリアルは、以下4つのステップに分かれています。本記事では、前半のステップ2つの手順について解説をしていきたいと思います。

  1. Setting up Photon Unity Network
    — Photon 事前セットアップ
  2. Connecting multiple users
    — マルチユーザー間での接続
  3. Sharing object movements with multiple users
    — 複数デバイス間でのオブジェクト共有
  4. Integration Azure Spatial Anchors into a shared experience
    — シェアリングの仕組みに ASA を統合する

詳細手順の説明

1. Setting up Photon Unity Network

第1章では、Photon Unity Network ( PUN ) の事前セットアップ、Unityプロジェクトの準備を行っていきます。

事前準備

1. Unity 新規プロジェクト ( 3D ) を作成します。

2. Windows Mixed Reality 開発用に Unity プロジェクト設定を変更します。

HoloLens アプリケーション開発時に必要となる設定なので、手順をまとめておきます。

  1. ビルドプラットフォームの切り替え
  2. Unity プロジェクト設定のチューニング
  3. Text Mesh Pro ライブラリインスト―ル
  4. Mixed Reality Toolkit (MRTK) をインポートする
  5. MRTK用に Unity プロジェクトをチューニング
  6. 新規シーンを作成し、MRTKを導入
  7. MRTKプロファイルを変更する
1. ビルドプラットフォームの切り替え

Build Settings ( ショートカット : Ctrl + Shif + B ) を開き、ターゲットプラットフォームに 「Universal Windows Platform」 に設定し、「Switch Platform」ボタンを押下します。

2. Unity プロジェクト設定のチューニング

Mixed Reality 向けのアプリケーションを開発する場合、立体視 ( 右目、左目で異なる画像を描画、視差効果で立体画像を創り出す ) を有効にする必要があります。これは以下、 [XR Settings] で設定することができます。※この設定を忘れると、2Dのアプリケーションが配置されるので注意してください。

グローバルメニュー [Edit] > [Project Settings] > [Player] > [XR Settings] を開きます。

[Virtual Reality Supported] にチェック を入れます。
チェックを入れると、[Virtual Reality SDKs] 項目が表示されるので、
「+」ボタンを押下し、[Windows Mixed Reality] を追加 します。

上記設定が終わった後、HoloLens向けに設定のチューニングを行います。
各項目が下表と同じ設定になるように、オプションを選択してください。

項目 設定内容
Depth Format 16-bit depth
Enable Depth Buffer Sharing ✅ ( チェックを入れる )
Stereo Rendering Mode Single Pass Instanced

3. Text Mesh Pro ライブラリインスト―ル

グローバルメニュー [Window] > [TextMeshPro] > [Import TMP Essential Resources] を選択します。

インポートされるファイル一覧が表示されるので、全て選択された状態であることを確認し、Importボタンを押下 します。

これにて、Text Mesh Pro ライブラリ等がインストールされ、Text Mesh Pro が使用できるようになります。

4. Mixed Reality Toolkit ( MRTK ) をインポートする

MRTKとは、Microsoft が主導するオープンソースプロジェクトで、MR開発に役立つUXデザインコンポーネントやスクリプト等がGitHub上にて提供されています。今回のチュートリアルで必要となるMicrosoft.MixedReality.Toolkit.Unity.Foundation.2.3.0.unitypackageパッケージをローカルマシンにダウンロードし、Unityプロジェクトにインポートします。

Unity プロジェクトに戻り、グローバルメニューから [Assets] > [Import Package] > [Custom Package ...] を選択します。

インポートするファイル 「Microsoft.MixedReality.Toolkit.Unity.Foundation.2.3.0.unitypackage」 を選択し、開くボタンを押下します。

こちらも全てのファイルにチェックがついていることを確認し、Importボタンを押下します。

5. MRTK用に Unity プロジェクトをチューニング

MRTK Project Configure を使って、Unityプロジェクトの再構成を行います。

グローバルメニュー [Mixed Reality Toolkit] > [Utilities] > [Configure Unity Project] を選択します。

「Enable MSBuild for Unity」チェックボックス以外、全てのオプションがオンになっていることを確認し、「Apply」ボタンを押下します。

6. 新規シーンを作成し、MRTKを導入

グローバルメニュー [Mixed Reality Toolkit] > [Add to Scene add Configure...] を選択し、シーンにMRTKを追加します。

処理後、Unityプロジェクトのヒエラルキーが変更され、MRTKが追加されていることが確認できます。


( 変更前 : 左図、 変更後 : 右図 )

7. MRTKプロファイルを変更する

MRTKの設定は、プロファイルで管理が行われ、標準で4種類のプロファイルが存在します。このプロファイル機能は、HoloLens / HoloLens 2 / その他XRデバイス などで異なるMRTK内部の設定を一元管理することができます。MRTKをインポートした際には、「DefaultMixedRealityToolkitConfigurationProfile」がセットされているので、HoloLens 2向けのプロファイル「DefaultHoloLens2ConfigurationProfile」に変更していきます。

Unity ヒエラルキーより、「MixedRealityToolkit」を選択し、Inspector上に表示されているプロファイル設定ドロップダウンより、[DefaultHoloLens2ConfigurationProfile] を選択します。

あわせて、空間認識メッシュの表示オプションを 「Occlusion」 変更する必要があるため、
さきほど設定した「DefaultHoloLens2ConfigurationProfile」を Clone して、カスタマイズを行います。


クローン後のファイル名を入力 ( 任意 )し、Cloneボタンを押下します。

[Spatial Awareness] タブを選択し、「Enable Spatial Awareness」オプションにチェックを入れます。

チェックを入れると、プロファイル設定が表示されるので、「DefaultMixedRealitySpatialAwarenessSystemProfile」 を Clone ボタンを押下します。

先ほど同様、Profile名 ( 任意 ) を入力し、Cloneボタンを押下します。

有効表示された「Windows Mixed Reality Spatial Mesh Observer」タブを展開し、「DefaultMixedRealitySpatialAwarenessMeshObserverProfile」を Clone します。

こちらでも、Profile名 ( 任意 ) を入力し、Cloneボタンを押下します。

設定項目最下部の「Display Option」項目をドロップダウンより、[Occlusion] に設定します。

上記で、Mixed Reality アプリケーション開発の一般的な設定が完了しました。

続いて、Photon Unity Network ( PUN ) を使うための設定を追加していきたいと思います。
※これまでの手順と同様の項目を編集する場面もありますが、これ以降はチュートリアル向けの個別設定となるので、注意してください。

Photon Unity Network ( PUN ) を利用するための設定追加

1. Publishing Settings > Capabilities 追加

続いて、Photon Unity Network ( PUN ) を使用する際に必要となる機能 ( Capability ) の追加を行います。

グローバルメニュー [Edit] > [Project Settings...] > [Player] > [Publishing Settings] を開きます。

Capabilities項目で、以下オプションにチェックが入っていることを確認します。

  • InternetClient
  • Microphone
  • SpatialPerception

次に、以下オプションに新たにチェックを入れます。

  • InternetClientServer
  • PrivateNetworkClientSever
  • RemovableStorage

上記 6つのオプションが有効 に設定されることを確認してください。

2. 組み込み Unity パッケージの追加

AR Foundation パッケージのインポートを行います。
( ※次のセクションで使用する Azure Spatial Anchors SDK で使用するため。)

グローバルメニュー [Window] > [Package Manager] を開きます。

検索バーにて「AR Foundation」 を選択し、インストールを実行します。

3. Tutorial で使用するアセットをインポートします。

以下、表記順に Unity カスタムパッケージをインポートしていきます。

  1. AzureSpatialAnchors.unitypackage (バージョン 2.1.1)
  2. MRTK.HoloLens2.Unity.Tutorials.Assets.GettingStarted.2.3.0.3.unitypackage
  3. MRTK.HoloLens2.Unity.Tutorials.Assets.AzureSpatialAnchors.2.3.0.1.unitypackage
  4. MRTK.HoloLens2.Unity.Tutorials.Assets.MultiUserCapabilities.2.3.0.0.unitypackage

MRTK同様、グローバルメニュー [Assets] > [Import Package] > [Custome Package...] よりインポートを実行します。

これを4つのパッケージ分繰り返し行います。

最後の「MRTK.HoloLens2.Unity.Tutorials.Assets.MultiUserCapabilities.2.3.0.0.unitypackage」をインポートした際に、以下エラーが発生します。「CS0246: The type or namespace name 'Photon' could not be found (are you missing a using directive or an assembly reference?)」このエラーは、次の手順で「Photon アセット」をインポートすることで解消されるので、このまま進めて問題ありません。

4. Photon アセットをインポートする

Unity アセットストアより、「Photon Unity Network ( PUN ) アセット」を ダウンロード & インポート していきます。

まず、グローバルメニュー [Window] > [Asset Store] を選択し ( ショートカット : Ctrl + 9 ) 、「Asset Store」ウィンドウを開きます。

「Asset Store」ウィンドウが開いたら、「Search」ボタンを押下します。

検索バーより、「PUN 2 - FREE」 を検索し、Download ボタンを押下します。

ダウンロードが完了すると、Importボタンが表示されるので、インポートを実行します。

プロジェクトへのインポートが完了したら、PUN設定ウィザードが表示されますが、アカウント作成前なので「×」ボタンを押下して、ウィザードを閉じておいてください。

5. Photon 設定追加

次に、Photon のアカウント作成、新しい PUN アプリケーションを作成していきます。
( アカウントをお持ちの方は、アカウント作成手順は読み飛ばしてください。 )

  1. photon サインインページ より、アカウントの新規作成を行います。

「メールアドレス」「ボットではないチェックボタン」を入力し、「登録する」ボタンを押下します。

入力したメールアドレスに、「Photon Engine アカウントへようこそ!」というタイトルのメールが送信されているので、確認を行い、メール本文に記載されているURLをクリックし、パスワードの設定を行います。

これにてアカウント登録は完了です。続いて、ダッシュボードより、Photon 新規アプリケーションの作成を行います。

Photon 新規アプリケーション作成ページが開いたら、以下項目を入力し、「作成する」ボタンを押下します。

項目 入力値
Photonの種別 Photon PUN
アプリケーション名 PhotonTutorial (任意)
アプリケーションの説明 Photon × MRTK Tutorial (任意)
URL (任意)今回は空欄

新規アプリケーションのデプロイが完了すると、新しい PUN アプリケーションがダッシュボードに表示されます。

これで Photon Unity Network ( PUN ) アカウント作成 & アプリケーション作成が完了しました。

6. Unity プロジェクトを PUN アプリケーションに接続します。

ここからは、Unityプロジェクトとさきほど新規作成した Photon Unity Network ( PUN ) アプリケーションを接続する手順となります。

Photon ダッシュボードに表示されている PUN アプリケーション から、アプリケーションIDをコピーします。(赤い部分)

Unity プロジェクトへ戻り、グローバルメニュー [Window] > [Photon Unity Networking] > [PUN Wizard]を選択し、先ほどのウィザードを再表示します。赤枠部分に、コピーしておいた「アプリケーションID」を入力し、「Setup Project」ボタンを押下します。

セットアップが完了すると、ウィザード下部に「Your AppId is now applied to this project」とのコメントが表示され、プロジェクトに Photon Unity Network ( PUN ) アプリケーションID が適用されたことが通知されます。

ここまでの手順を実行することで、UnityプロジェクトとPUNアプリケーションの接続を行うことができました。次の章では、Photonを使ったマルチユーザー接続を実現するサンプルを試していきたいと思います。

2. Connecting multiple users

第2章では、複数のユーザーを接続し、各ユーザーが互いの位置を確認できるサンプルを動かしていきます。

シーンの準備

1. Unity プロジェクトを開きます。

2. チュートリアルの実行に必要となるプレハブを追加します。

「Project」ウィンドウより、[Assets] > [MRTK.Tutorials.MultiUserCapabilities] > [Prefabs] フォルダーに移動し、以下3つのプレハブを選択、ヒエラルキーにドラッグ&ドロップして追加をします。

  • DebugWindow ( デバッグ用のテキストプレハブ )
  • NetworkLobby ( Photon ルーム、ユーザー作成、管理用プレハブ )
  • SharedPlayground ( ネットワーク管理用プレハブ )


ユーザープレハブを作成する

複数ユーザー接続時に、各ユーザーの位置を表すオブジェクト ( Prefab ) を作成していきます。

1. ユーザーの作成と構成

「Hierarchy」ウィンドウの空スペースを右クリックし、「Create Empty」ボタンを押下します。

空のゲームオブジェクトが作成されたら、ゲームオブジェクト名を「PhotonUser」に変更し、Transform > [Position] の値が X = 0、 Y = 0、 Z = 0 に設定されていることを確認してください。

PhotonUser オブジェクトを選択した状態で、Inspectorウィンドウで [Add Component]ボタンを押下し、「Photon User (Script)」 を追加します。

同様の手順にて、「Generic Net Sync (Script)」コンポーネントを追加します。
設定は、以下と同様になるように編集を行ってください。

  • [Is User] オプションにチェックを入れる。

さらに、「Photon View (Script)」 を追加し、以下と同じ設定となるよう編集を行います。

  • Observed Components フィールドに、「Generic Net Sysnc (Script)」をドラッグ&ドロップで追加します。

2. アバターを作成する

「Hierarchy」ウィンドウで、PhotonUser オブジェクトを右クリックし、[3D Object] > [Spere] を追加します。
PhotonUser オブジェクトの子オブジェクトとして、以下のように Inspector 上の値を編集します。

  • Transform > [Position] を変更する。 ( X = 0、 Y = 0、 Z = 0 )
  • Transform > [Scale] を変更する。 ( X = 0.15、 Y = 0.15、 Z = 0.15 )


3. プレハブを作成する

2.で作成したアバターをプレハブにしていきます。

「Project」ウィンドウで、[Assets] > [MRTK.Tutorials.MultiUserCapabilities] > [Resources] へ移動します。PhotonUser オブジェクトを「Resource」フォルダへドラッグ&ドロップし、PhotonUser オブジェクトをプレハブ にします。

プレハブ化が完了すれば、「Hierarchy」ウィンドウから PhotonUser オブジェクトを削除します。

PUN を利用して、ユーザープレハブのインスタンスを作成する

[Hierarchy]ウィンドウで NetworkLobby オブジェクトを展開し、 NetworkRoom 子オブジェクトを選択、[Inspector]ウィンドウで Photon Room (Script) コンポーネントを次のように編集します。

  • Photon User Prefab フィールドに、[Resource]フォルダに保存した PhotonUser プレハブをドラッグ&ドロップで割り当てます。

それでは、Unity からプロジェクトを Export し、Visual Studio を使ってビルドしていきましょう。

エクスポートしたソリューションファイル (.sln) を Visual Studio 2019 で開きます。

グローバルナビゲーション下のビルド設定を以下内容に切り替え、「Device」ボタンを押下してビルドを実行します。

ビルド設定 選択内容
ビルドの種類 Release
ターゲットプラットフォーム ARM
デプロイ先 Device

これにて第2章は終了です。上記アプリケーションを HoloLens 2 実機にデプロイし、アプリ起動後、Unity Editor 上でゲームの再生を実行すると、ユーザーのカメラの位置を共有できていることが確認できます。

思ったより遅延もなく、快適な印象を受けました。

以下、残りの2章は別途ご紹介させていただく予定です。

3. Sharing object movements with multiple users
4. Integration Azure Spatial Anchors into a shared experience

本記事の続きは、「HoloLens 2 公式チュートリアル「Mult-user capabilities tutorials」を試してみた [後編]」をご覧ください。

最後までお読みいただき、ありがとうございました。

Appendix : Official Tutorials

Microsoft HoloLens 2

Futo_Horio
Kobe Digital Labo Inc. 新事業創造係 MR班 班長 / Microsoft Azure コミュニティ「Azure Tech Lab」主催 / Honde Next 共同代表
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした