Unity5 + iOS でWebsocketとnode.js連携を試してみる
Unity iOSアプリでWebSocketを使いたくてライブラリをいろいろ探しました。
Editor上では動くのに端末で動かないライブラリもあり、いろいろ試したメモ。
環境・前提
- Unity 5.2.0f3 (onMac)
- Unity/Android/iOS Proライセンス取得済み
- 有料Assetはなるべく使いたくない(手続きが面倒な環境のため)
- iOSは8.3.3
途中結果
[1]node.js wsとの接続
現状では、iOS実機上で無料Assetの
が動作しています。
Socket.IO for Unityはライブラリの一部(JsonObjects for Unity)がLGPL2.1なので商用を視野に入れるとできれば避けたい。
ということで、ひとまず、UniWeb-Freeが良い感じ。
けど、切断(Close)とかにちょっと不安が、、 引き続き調べようかな
[2]node.js socket.ioとの接続
GitHub上のunity-socket.ioが今のところ、node.jsのsocket.io1.3.7と接続できています。
AssetのSocket.IO for Unityと同じ人が作っているみたい、、
同じくJsonObjectが同梱されていてLGPLです。
試した内容
判例 | 説明 |
---|---|
◎ | 実際に動いた |
○ | ドキュメントを見る限り動く |
△ | 試した限りではiOSで動かせなかった(本当は動くかも) |
Pro | Proライセンスが必要と明記されている |
on Asset Store
タイトル | 値段 | ライセンス | require | Unity5 | Editor | iOS | Android |
---|---|---|---|---|---|---|---|
◎UniWeb-Free | free | ? | 5.1 | ◎ | ◎ | ◎Pro | ○Pro |
UniWeb | $25 | see | 4.6.5- | ○ | ○ | ○Pro | Pro |
WebSocket for desktop and mobile | $35 | Apache License, 2.0 | 4.6.1- | ○ | ○ | ○ | ○ |
◎Socket.IO for Unity | free | MIT +LGPL2.1 | 4.5.3- | ◎ | ◎ | ◎Pro | ○Pro |
WebSocket-Sharp for Unity | $15 | ? | 4.1.3- | ? | ○ | ○Pro | ○Pro |
on GitHub
タイトル | 値段 | ライセンス | require | Unity5 | Editor | iOS | Android |
---|---|---|---|---|---|---|---|
UnitySocketIO | free | MIT | ? | ◎ | ◎ | ◎see | ? |
websocket-sharp | free | MIT | 4.1.3- | ◎ | ◎ | see△ | ○ |
◎unity-socket.io | free | MIT | ? | ◎ | ◎ | ◎see | ? |
UnitySocketIOはnode.js+socket.io0.9とUnity on iOSで動作することができましたが、CPU使用率が異常に高い。これはないな・・
unity-socket.io はnode.js+socket.io1.3.7(最新)とUnity on iOSで簡単なテストは動作OK
etc
タイトル | 値段 | ライセンス | require | Unity5 | Editor | iOS | Android |
---|---|---|---|---|---|---|---|
WebSockets.unitypackage | free | ? | ? | ◎ | ◎ see | △ | ? |
node.js側のサーバーのコード
参考までに
wsを利用したテストの場合
var ws = require('ws').Server; var server = new ws({ port: 6666 }); server.on('connection', function(ws) { console.log('connected!'); ws.on('message', function(message) { console.log(message.toString()); }); ws.on('close', function() { console.log('disconnected...'); }); setInterval(function() { ws.send("Hi!"); }, 1000); });
socket.io最新版(1.3.7)を利用したテストの場合
var io = require("socket.io")(); io.on("connection", function (socket) { console.log("online id: " + socket.id); socket.broadcast.emit("online", { id: socket.id }); socket.on("disconnect", function () { console.log("offline id: " + socket.id); socket.broadcast.emit("offline", { id: socket.id }); }); socket.on("message", function (obj) { var id = socket.id; var message = obj.message; console.log("message id: " + id + " message: " + message); io.emit("message", { id: id, message: message }); }); }); io.listen(6666);
UnityEditor上では動くのにiOS端末では動かない件
XCodeのコンソールを見たら
System.ExecutionEngineException: Attempting to JIT compile method
while running with --aot-only.
などが発生していました。 通信自体の問題ではなく、Monoのコンパイラの制限のようです。 このあたりを回避するようにコーディングしたら動きました。
【Amazon.co.jp限定】uGUIではじめるUnity UIデザインの教科書-Unity5対応 特典PDF付き
- 作者: 岩井雅幸,丸山弘詩
- 出版社/メーカー: マイナビ
- 発売日: 2015/09/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る