見出し画像

WebSocket の使い方 - Unity

Unityの「WebSocket」の使い方をまとめました。「Node.js版」のサンプルとの通信できます。

1. WebSocket

Webアプリで双方向通信を実現するための技術規格。
文字列とバリナリデータを送受信することが可能。

2. プロジェクトの作成

プロジェクトの作成方法は、次のとおり。

(1) 「websocket-sharp」をダウンロード。
(2) 「websocket-sharpフォルダ」内の「websocket-sharp.sln」をダブルクリック。
Visual Studioが起動します。
(3) 「Example」「Example1」「Example2」「 Example3」を削除。

画像1

(4) メニュー「プロジェクト → アクティブ構成 → リリース」を選択。
(5) メニュー「ビルド → すべてビルド」を選択。
成功すると、websocket-sharp/bin/Release/websocket-sharp.dllが生成されます。
(6) UnityプロジェクトのAssets直下にPluginsフォルダを作り、「websocket-sharp.dll」を配置。

3. サーバの作成

WebSocketのサーバのコードは、次のとおり。

◎ ServerEx.cs

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

public class ServerEx: MonoBehaviour {
    WebSocketServer server;

    // スタート時に呼ばれる
    void Start ()
    {
        // WebSocketのサーバの生成
        server = new WebSocketServer(5001);
        server.AddWebSocketService<Echo>("/");
        server.Start();
    }

    // 破棄時に呼ばれる
    void OnDestroy()
    {
        server.Stop();
        server = null;
    }
}

public class Echo : WebSocketBehavior
{
    // クライアントからのデータ受信時に呼ばれる
    protected override void OnMessage(MessageEventArgs e)
    {
        Debug.Log(e.Data);

        // クライアントにデータを返信
        Sessions.Broadcast(e.Data);
    }

    // 切断時に呼ばれる
    protected override void OnClose(CloseEventArgs e) {
        Debug.Log("close");
    }
}

◎ Serverの生成
引数port付きでServerクラスを生成します。その後、AddWebSocketService()でWebSocketBehaviorを追加し、Start()で開始します。

◎ WebSocketのメソッド
WebSocketのメソッドは次の2つです。

・AddWebSocketService(): サーバーの振る舞いの追加。
・Start(): サーバーの開始。
・Send(data): クライアントへのデータの送信。
・Close(): クライアントとの切断。

◎ WebSocketのイベント
WebSocketのイベントは次の4つです。

・OnOpen: 接続時に呼ばれる。
・OnMessage: データ受信時に呼ばれる。
・OnClose: 切断時に呼ばれる。
・OnError: エラー時に呼ばれる。

4. クライアントの作成

WebSocketのクライアントのコードは、次のとおり。

◎ ClientEx.cs

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

public class ClientEx: MonoBehaviour {
    WebSocket ws;

    // スタート時n呼ばれる
    void Start()
    {
        // WebSocketのクライアントの生成
        ws = new WebSocket("ws://localhost:5001/");

        // 接続時に呼ばれる
        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("open");
        };

        // サーバからのデータ受信時に呼ばれる
        ws.OnMessage += (sender, e) =>
        {
            Debug.Log(e.Data);
        };

        // クローズ時に呼ばれる
        ws.OnClose += (sender, e) =>
        {
            Debug.Log("close");
        };

        // エラー時に呼ばれる
        ws.OnError += (sender, e) =>
        {
            Debug.Log(e.Message);
        };

        // 接続
        ws.Connect();
    }

    // フレーム毎に呼ばれる
    void Update()
    {
        // スペースキー押上時に呼ばれる
        if (Input.GetKeyUp(KeyCode.Space))
        {
            ws.Send("hello");
        }
    }

    // 破棄時に呼ばれる
    void OnDestroy()
    {
        ws.Close();
        ws = null;
    }
}

◎ WebSocketの生成
引数URL付きでWebSocketを生成します。

5. 実行

コードをゲームオブジェクトに追加して実行。

この記事が気に入ったらサポートをしてみませんか?