たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

HoloLens で WebSocket を使う

はじめに

こんにちは、たるこすです。

最近 HoloLens を使って Roomba を操縦しようとしているのですが、その際に HoloLens で WebSocket を使えるようにしたので、その方法についてまとめようと思います。

Unity Editor で実行する場合と HoloLens 上 (UWP) で実行する場合で実行環境が違っており、通信周りの API が違うため同一のコードは動きません。そこで、それぞれの環境に向けて、WebSocket 用ライブラリを作成します。

以下のブログを参考にさせていただきました。

hiroyky.hatenablog.com

Unity Editor 用のライブラリ

以下の記事のとおり、websocket-sharp をビルドします。 qiita.com

作成した websocket-sharp.dll を Unity に読み込み、以下のように Inspector で Editor でのみ利用するように設定します。

UWP 用ライブラリ

始めは冒頭で紹介したブログで紹介されている以下のリンク先のコードを使ってみたのですが、私の環境だとなぜか WebSocket の接続がすぐに切れてしまいました。 github.com

別のコードを探したところ、以下のリポジトリが見つかりました。

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 さんから以下の情報をいただきました。ありがとうございます!