たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

最小手でUnity-Node.js間WebSocket通信

Unity & Node.js使いなら、最速5分でできるよ。

概要

Unity (client) 側はwebsocket-sharpを、Node.js (server) 側はwsを使う。
Unityアプリの画面click回数をserverへ送るテストコードを書くものとする。

手順

  1. websocket-sharpのダウンロードとビルド
  2. server側Node.js コードの準備
  3. client側Unityコードの準備
  4. 通信チェック

1. websocket-sharpのダウンロードとビルド

websocket-sharpをgit cloneして落としてくる。
不要なExamples (多分3つほどある) ディレクトリを削除する。
slnファイルを開き、ビルドする。
websocket-sharp/binの中にdllファイル(websocket-sharp.dll)があればOK!
この1ファイルがUnity側のすべてを担ってくれる。すごい。

2. server側Node.js コードの準備

適当なディレクトリでnpm initしておき、.jsファイルを作成する。
npm install wsでライブラリwsをインストールする。
あとはWebSocketサーバーのコードを書くだけ。最小なら5行ほどで終わる。

const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({
  port: 8080
});
wss.on('connection', (ws) => ws.on('message', (message) => console.log('received: %s', message)));

かけたらnode (filename).jsでとりあえずサーバー走らせとけば準備完了

3. client側Unityコードの準備

次はclient側のUnity. 先のwebsocket-sharp.dllをコピーし、Unity editor上からAssetsの好きなところへ入れる。
こうすることで、C# scriptのusingからアクセスが可能になる。
あとはC#コードを書き、適当なEmpty objectにアタッチするだけ。
コードはこんな感じ。

using UnityEngine;
using WebSocketSharp;

public class wsClient : MonoBehaviour {
    private int count = 0; // click counter
    private WebSocket ws;
    void Start () {
        var url = "ws://localhost:8080";
        ws = new WebSocket(url);
        ws.Connect();
    }
    void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("clicked!");
            count++;
            ws.Send("clicked No. " + count.ToString());
        }
    }
}

4. 通信チェック

Node.js サーバーappを動かした状態で、UnityをRun。画面をクリックするとメッセージが送られるはず。
Node.jsのコンソールでreceived: clicked No. Xと出てきたら大成功!
あとは好きにメッセージを送り、server側からの通信を自力で実装して好き放題だぞえ。

参考文献


qiita.com

github.com
このサイトで作ってあるデモ。wsさえnode.js側でinstallしとけばそのまま動く.