HoloLens で WebSocket を使う
はじめに
こんにちは、たるこすです。
最近 HoloLens を使って Roomba を操縦しようとしているのですが、その際に HoloLens で WebSocket を使えるようにしたので、その方法についてまとめようと思います。
Unity Editor で実行する場合と HoloLens 上 (UWP) で実行する場合で実行環境が違っており、通信周りの API が違うため同一のコードは動きません。そこで、それぞれの環境に向けて、WebSocket 用ライブラリを作成します。
以下のブログを参考にさせていただきました。
Unity Editor 用のライブラリ
以下の記事のとおり、websocket-sharp をビルドします。 qiita.com
作成した websocket-sharp.dll を Unity に読み込み、以下のように Inspector で Editor でのみ利用するように設定します。
UWP 用ライブラリ
始めは冒頭で紹介したブログで紹介されている以下のリンク先のコードを使ってみたのですが、私の環境だとなぜか WebSocket の接続がすぐに切れてしまいました。 github.com
別のコードを探したところ、以下のリポジトリが見つかりました。
リポジトリに含まれている UwpWebsocket.cs を Unity にインポートするだけで利用できます。
WebSocket を利用するコード
UwpWebsocket.cs が websocket-sharp のメソッド名にあわせてくれているため、利用する側はコードを共通化することができます。
かなり省略していますが、以下のようなコードで WebSocket を使うことができました。
using WebSocketSharp; ... class RoombaWebSocketController : MonoBehavior { ... WebSocket websocket; ... public void Connect(){ websocket = new WebSocket(uri); websocket.ConnectAsync(); } public void Disconnect() { websocket.Close(); } public void SendCommand(string msg) { if(websocket != null && websocket.IsAlive) { websocket.Send(msg); } } ... }
2017/10/7 追記
@dy_karous さんから以下の情報をいただきました。ありがとうございます!
UWPでWebsocketを使うならば、MS純正のMessageWebSocketかWebSocket4Netなんかもおすすめです。https://t.co/a9AEYZPYdu https://t.co/wLFS7CBZJS
— d_yama (@dy_karous) 2017年10月1日