LoginSignup
4
2

More than 5 years have passed since last update.

Mixed Reality Toolkit - Unityのサンプル「SharingWithUNET」をUnity Editorのデバッグ実行で確認する。

Posted at

個人でHoloLensでシェアリングアプリを作るとき困るんです

もうお察しかもしれませんが、HoloLensでシェアリングのアプリを作るときに最大の問題は「HoloLensが複数台必要になること」です。過去色々方法は模索していたんですが最も有力なものとしてHoloLensエミュレーターを利用する方法です。過去SharingService(Mixed Reality Toolkitが提供するサーバを立てて利用するシェアリングのシステム)の場合ではあるのですが、この方法で複数台のHoloLensでの動きを確認していました。HoloLens実機1台でシェアリングアプリのデバックするには以下の組み合わせで疑似的な2デバイス状態を作る形になると思います。

  1. HoloLens Emulator&HoloLens実機でシェアリング
  2. Unity Editorを使ってPC&HoloLens実機でシェアリング
  3. PCのWindows Mixed Realityデバイス & Hololens実機でシェアリング

この中で特に「2. Unity Editorを使ってPC&HoloLens実機でシェアリング」はデバッグ時の情報も確認できる&手軽に実現できるのでいいと思います。
ということで、今回はMixed Reality Toolkit - Unityのサンプル「SharingWithUNET」をUnity Editorのデバッグ実行で確認したいと思います。

SharingWithUNETはそのままではUnity Editorのデバッグはできない。

実はそういうトラップがあったります。MRTKについているこのサンプルをUnity Editor上で実行してもUNETでいう「ホスト」や「クライアント」になれません。これはUnity Editorの場合は「ホストのIPアドレスがランダム」という実装になっているのでMRTKのサンプルをベースにUNETを使うとデバッグ時に困ります。
ということで少し見直して問題を解消しシェアリングアプリ開発を楽にしましょう。

修正方法

まずは、開発環境ですが以下の形となります。

開発環境

修正箇所

修正するコードは「NetworkDiscoveryWithAnchor.cs」です。
修正箇所は以下の3個所になります。

  • Awakeメソッド
  • InitAsServerメソッド
  • StartHostingメソッド

Awakeメソッドの修正

AwakeメソッドではUnity Editor上で動かす際にIPアドレスを「"Editor"+ランダム値」で設定します。まずはここを正しいIPアドレスに変更しましょう。
プロパティを用意してもいいのですが、ここは手っ取り早くハードコーディングで。

NetworkDiscoveryWithAnchor.cs
        private void Awake()
        {
#if !UNITY_EDITOR && UNITY_WSA
            // Find our local IP
            foreach (HostName hostName in NetworkInformation.GetHostNames())
            {
                if (hostName.DisplayName.Split(".".ToCharArray()).Length == 4)
                {
                    Debug.Log("Local IP " + hostName.DisplayName);
                    LocalIp = hostName.DisplayName;
                    break;
                }
            }
#else
            LocalIp = "XXX.YYY.ZZZ.XXX";//ここを端末のIPアドレスにする。
#endif

InitAsServerメソッドとStartHostingメソッド

これらのメソッドは実際にホストとしてサービスを立ち上げるために利用するメソッドなのですが、Unity Editorでの実行時は意図的にIPアドレスの指定を行っていません。
これは先ほどのAwakeメソッドでダミーのIPアドレスを与えている空だと思います。
ここはUnity Editorのみで実行が除外されている部分を修正します。
修正箇所は各メソッド最初にある以下の記述から「#if !UNITY_EDITOR && UNITY_WSA」と「#endif」を削除します。

NetworkDiscoveryWithAnchor.cs


private IEnumerator InitAsServer()
{
    Debug.Log("Acting as host");
    NetworkManager.singleton.serverBindToIP = true;
    NetworkManager.singleton.serverBindAddress = LocalIp;
  
  
}


public void StartHosting(string SessionName)
{
    StopListening();

    NetworkManager.singleton.serverBindToIP = true;
    NetworkManager.singleton.serverBindAddress = LocalIp;
 ・
 ・
 }

HoloLensにデプロイして実行

アプリが完成したらHoloLensにデプロイします。
その状態からUnity Editorをデバックで実行しホストとして実行します。その後HoloLensで同じアプリを起動するとデバッグ中の端末が一覧に表示されるので、選択して参加することでシェアリングが可能です。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2