UnityでWebSocketを使用する

  • 51
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

1. C# WebSocketライブラリのダウンロード

使用するライブラリ
websocket-sharp
https://github.com/sta/websocket-sharp

websocket-sharpのgithubページに移動し、ファイルをダウンロード

スクリーンショット 2015-11-05 17.40.50-01.png

2. C# WebSocketライブラリのビルド

Macの場合、
websocket-sharpフォルダ内の
websocket-sharp.slnファイルをダブルクリックする。

ws_000.png

① websocket-sharpソリューションファイルを開く

Unityをインストールして.slnファイルの扱いについての何も設定を行っていなければ、MonoDevelopが立ち上がります。
ビルドにはMonoDevelopを使用することにします。

② 不要なプロジェクトの削除

このままビルドすると、サブプロジェクトであるExampleXXプロジェクト部分でエラーが出力されるので、それらをソリューションから削除しておきます。(実際、エラーは気にしなくても大丈夫です)

メニューから メニュー>Visual Designを選択し、サイドバーにプロジェクト一覧を表示

Example, Example1, Example2, Example3を選択し、

右のツールボタンから、削除を選択
Removeをクリック

スクリーンショット 2015-11-05 19.13.57.png

③ ビルド方法をReleaseに変更

④ メニューから ビルド>全てをビルド を実行

ビルドに成功すると、
websocket-sharp/bin/ ディレクトリに、Release/websocket-sharp.dll ファイルが作成されます。
ws_001.png

3. Unityにwebsocket-sharpライブラリを読み込む

先ほどビルドした websocket-sharp.dllファイルを Assets直下にPluginsフォルダを作り、その下に置きます。
スクリーンショット 2015-11-05 18.12.22.png

4. サンプルコード

① クライアント (Unity)

シンプルなWebSocketクライアントプログラムです。
変数 WSAddress には接続先のWebSocketサーバアドレスを記述します。
スペースキーを押すと、Test Message というWebSocketメッセージを送信します。

ClientExample.cs
using UnityEngine;
using System.Collections;
using WebSocketSharp;
using WebSocketSharp.Net;

public class ClientExample: MonoBehaviour {

    WebSocket ws;

    void Start()
    {
        ws = new WebSocket("ws://localhost:3000/");

        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("WebSocket Open");
        };

        ws.OnMessage += (sender, e) =>
        {
            Debug.Log("WebSocket Message Type: " + e.Type + ", Data: " + e.Data);
        };

        ws.OnError += (sender, e) =>
        {
            Debug.Log("WebSocket Error Message: " + e.Message);
        };

        ws.OnClose += (sender, e) =>
        {
            Debug.Log("WebSocket Close");
        };

        ws.Connect();

    }

    void Update()
    {

        if (Input.GetKeyUp("s"))
        {
            ws.Send("Test Message");
        }

    }

    void OnDestroy()
    {
        ws.Close();
        ws = null;
    }
}

② サーバーサイド (Unity)

ポート3000番で、メッセージが来たらそのままそのメッセージをブロードキャストするシンプルなサーバープログラムです。

ServerExample.cs
using UnityEngine;
using System.Collections;
using WebSocketSharp;
using WebSocketSharp.Net;
using WebSocketSharp.Server;

public class ServerExample: MonoBehaviour {

    WebSocketServer server;

    void Start ()
    {
        server = new WebSocketServer(3000);

        server.AddWebSocketService<Echo>("/");
        server.Start();

    }

    void OnDestroy()
    {
        server.Stop();
        server = null;
    }

}

public class Echo : WebSocketBehavior
{
    protected override void OnMessage (MessageEventArgs e)
    {
        Sessions.Broadcast(e.Data);
    }
}

(補足) サーバーサイド (Node.js)

ポート3000番で、メッセージが来たらそのままそのメッセージをブロードキャストするシンプルなNode.jsサーバープログラムです。

sever.js
var ws   = require ('ws').Server;

var wss = new ws ({port: 3000});


wss.broadcast = function (data) {
    for (var i in this.clients) {
        this.clients [i].send (data);
    }
};

wss.on ('connection', function (ws) {
    ws.on ('message', function (message) {
        var now = new Date();
        console.log (now.toLocaleString() + ' Received: %s', message);
        wss.broadcast (message);
    });
});