チラ裏Unity

主にUnityについての備忘録ですが誰か様の為になれば

UnityでSocket.IO

目標

  • Unity から socket.io に接続

 

環境

  • Unity 5.0.2f1 Personal
  • OS X 10.10.3

 

node.js のインストール

http://nodejs.org/

  1. http://nodejs.org/download にアクセス
  2. Mac OS X Installer (.pkg) をダウンロードしてインストール

 

socket.io モジュールのインストール

http://socket.io/

  1. $ npm install -g socket.io@0.9.17
    • -gでグローバルにインストール
    • 必要であればsudo付で実行
    • 後述のUnitySocketIOが1.x以降に対応していない?ため0.9.xを指定
  2. 以下の環境変数を追加
    export NODE_PATH=/usr/local/lib/node_modules

 

UnitySocketIO のインストール

  1. $ git clone https://github.com/NetEase/UnitySocketIO.git
  2. SocketIO/bin/Debug 以下の全 dll ファイルを Unity プロジェクトの /Assets/Plugins ディレクトリにコピー

 

socket.io サーバを立ち上げる

  1.  以下のような socket.io 用サーバ js ファイルを適当な場所に作成
    $ vi server.js
    var io = require('socket.io').listen(8080);

    io.on('connection', function (socket) {
      socket.send('connect.');
      socket.emit('emit', 'emit.');

      socket.on('message', function (data) {
        console.log('message data is ... ' + data);
      });

      socket.on('emit', function (data) {
        console.log('emit data is ... ' + data);
      });

      socket.on('disconnect', function () {
        console.log('disconnect.');
      });
    });
  2. $ node server.js

 

socket.io クライアントをUnityで立ち上げる

  1. 以下のようなスクリプトを適当なGameObjectにアタッチして実行
    using UnityEngine;
    using SocketIOClient;

    public class SampleSocketIO : MonoBehaviour {

        public SocketIOClient.Client client;

        void OnGUI() {
            if (GUILayout.Button("Connect")) {
                this.client = new Client("http://127.0.0.1:8080");
                this.client.On("connect", (message) => {
                });
                this.client.On("message", (message) => {
                    Debug.Log(message.MessageText);
                });
                this.client.On("emit", (message) => {
                    Debug.Log(message.MessageText);
                });
                client.Connect();
            }

            if (GUILayout.Button("Send")) {
                this.client.Send(System.DateTime.Now.ToString());
            }

            if (GUILayout.Button("Emit")) {
                this.client.Emit("emit"System.DateTime.Now.ToString());
            }

            if (GUILayout.Button("Close")) {
                this.client.Close();
            }
        }
    }
  2. 実行後に各種GUIボタンを押下することで導通確認が可能

 

まとめ

  • 最新の socket.io(1.3.x)に UnitySocketIO が対応していないっぽい