11/25(土),11/26(日)の2日間でXR GameJamに参加してきました。
東京会場は、
25日はXRもくもく会と、
26日はプログラマのためのUnity勉強会と日程被りで、
同ジャンルで喰い合いになったため人数は少なかったですが、
良い体験が得られた会だったと思います。
夜に家で仕込んで完成させたSharingが2日目現場でまったく動かないまま終了になったので、
Sharing の実装に入る前に、どの方法で Sharing したらよいか、
各種Sharing の仕様と判断方法を調べました。
ハッカソンやイベントでSharing を行う前に、必ず現場のネットワーク要件の確認をしましょう!
コケるなら早いほうが良いので、0歩目でコケるのは超大事です。
MixedRealityToolkit-Unity の SharingServeiceを用いた方法
Microsoft公式の方法で、Sharing Serviceをサーバーとして用いてHoloLensがクライアントとしてぶら下がる方法です。
お手軽簡単と言われていますが、動かせる環境だとお手軽です。
ただし、深掘りする人が少ないのでブラックボックス感が強く、嵌った時にどうすればいいかの知見が少ないのが欠点です。 (※このあたり、次の記事で掘り下げます。)
学習リソースとしては Holograms 240 が良いでしょう。
実際に使う場合は、MixedRealityToolkit-Unity のExamplesを使うほうが手になじみます。
仕様
使用するポートとプロトコルは以下の通りです。
Port | Protocol | 用途 |
---|---|---|
20602 | UDP | SessionList |
20601 | UDP | Session ID:0 |
20600 | UDP | Session ID:1 |
20599 | UDP | Session ID:2 |
... | UDP | Session ID:n |
セッションが増えるほど使用するポートが増えていく仕様です。
開かれたネットワークでSharingServiceを立てることはないのでportが枯渇するほどは使わないという想定なのでしょう。
クライアント同士のUDP接続ができないネットワークの場合、SharingServiceは使えません。 会場のネットワークがその仕様の場合は、自らルーターを持ち込むか、諦めて別の方法を考えましょう。
必要なネットワーク条件
- クライアント同士のUDP接続
Unity の ネットワーク機能(UNET)を用いた方法
Academy の Mixed Reality 250 で実装されている方法です。
今回はAcademyはすっ飛ばして、 Mixed Relity Toolkit for Unityの中にサンプルがありますので、そちらを参照します。
Mixed Relity Toolkit for Unity をインポートした後で以下のシーンを開きます。
Assets/HoloToolkit/SharingWithUNET/Scenes/SharingWithUnetExample.unity
仕様
使用するポートとプロトコルは以下の通りです。
Port | Protocol | 用途 |
---|---|---|
443 | SSL | MatchMaker(mm.unet.unity3d.com)に繋ぐ |
任意(8675) | UDP | Transport |
任意 | WebSocket(TCP) | Transport(UDPと排他) |
任意(48675) | UDP | Broadcast |
任意(11000) | websocket(TCP) | UNetNetworkTransmitter |
TransportはUDPかwebsocketの排他利用です。要件に合わせて選びましょう。
HoloLens同士のアンカー情報のやり取りは、
端末の検出をUDP Bloadcast,
アンカー情報の送受信を UNetNetworkTransmitter で行います。
使用ポートは多いですが、セッションの増加によって増えていくということが無いです。
そして、ネットワーク内でUDP bloadcastが許可されて無いとSharingが完成しないことが分かります。
必要なネットワーク要件
独自実装
上記環境がネットワークの条件的に利用困難だった場合、独自実装するしかありません。
独自実装のための足掛かりは、アキヒロ氏がまとめているので、参考にすべきです。
まとめ
Sharingしたい場合、会場のネットワークを使う前に、ネットワーク要件を確認しよう!
次回は、割と誰も説明してない Sharing Service の使い方について説明します。