UnityでSocket.IO
目標
- Unity から socket.io に接続
環境
- Unity 5.0.2f1 Personal
- OS X 10.10.3
node.js のインストール
- http://nodejs.org/download にアクセス
- Mac OS X Installer (.pkg) をダウンロードしてインストール
socket.io モジュールのインストール
- $ npm install -g socket.io@0.9.17
- -gでグローバルにインストール
- 必要であればsudo付で実行
- 後述のUnitySocketIOが1.x以降に対応していない?ため0.9.xを指定
- 以下の環境変数を追加
export NODE_PATH=/usr/local/lib/node_modules
UnitySocketIO のインストール
- $ git clone https://github.com/NetEase/UnitySocketIO.git
- SocketIO/bin/Debug 以下の全 dll ファイルを Unity プロジェクトの /Assets/Plugins ディレクトリにコピー
socket.io サーバを立ち上げる
- 以下のような socket.io 用サーバ js ファイルを適当な場所に作成
$ vi server.jsvar 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.');
});
}); - $ node server.js
socket.io クライアントをUnityで立ち上げる
- 以下のようなスクリプトを適当な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();
}
}
} - 実行後に各種GUIボタンを押下することで導通確認が可能
まとめ
- 最新の socket.io(1.3.x)に UnitySocketIO が対応していないっぽい