ã¯ããã«
å
æ¥æ¸ããã¨ã³ããªï¼Unity から Node.js を起動時に裏で実行・通信して諸々の処理を肩代わりしてもらう方法考えてみた - 凹みTipsï¼ã®ãã¿ãã ãã§ã使ããããã«ã¢ã»ããã«ãã¾ãããèµ·åæã« Node.js ãè£ã§å®è¡ãã¦é¢åãªãããã¯ã¼ã¯å¨ãã®å¦çãªã©ãè¡ããUnity ã¨ã¯ OSC ã WebSocket ãéãã¦ããã¨ããããã¨ã§ãC# ã§æ¸ãã®ãé¢åãªå¦çã JavaScriptï¼â Unity ã® JSï¼ã§è©ä»£ããã§ãããã®ã§ããå¥éãµã¼ããç«ã¡ä¸ããæ¹å¼ãããã¢ããªãç«ã¡ä¸ããã°èªåã§ Node ã®ãµã¼ããç«ã¡ä¸ããã®ã§æ¥½ãã¨ããã®ãçãã§ãã
ãã¢
å®è¡ããçµæã®ãã°ãªã©ã¯ç°¡æçã§ãã Editor ä¸ã§è¦ããããã«ãªã£ã¦ãã¾ãã
åç»ã§ã¯ WebSocket ãµã¼ãã®ç«ã¡ä¸ãã¨ããããå©ç¨ãã HTML ãã¡ã¤ã«ããã¹ãããå¦çãè¡ã£ã¦ãã¦ã以ä¸ã®æ§ãªã¹ã¯ãªãããèµ·åæã«è£ã§èµ°ããã¦ãã¾ãã
Assets/StreamingAssets/.node/websocket.js
var http = require('http'); var fs = require('fs'); var server = http.createServer(function(req, res) { fs.createReadStream('./websocket.html').pipe(res); }).listen(8080); var io = require('socket.io').listen(server); io.sockets.on('connection', function (socket) { socket.emit('server/hello', { from: 'server' }); socket.on('browser/move', function (data) { io.sockets.emit('browser/move', data); }); });
ãã¢ã§ã¯ WebSocket ã§ãã¦ã¹åº§æ¨éã£ã¦ããã ãã§ãããTwitter ã®ã¹ããªã¼ã åã£ã¦ãã¦æ´å½¢ãããã¼ã¿ã渡ãã¨ãããã°æ¥½ã«è²ã
åºæ¥ãã¨æãã¾ãã
ãã¦ã³ãã¼ã
unitypackage ãéãã¦ä¸ãããåå ã¯ä¸æã§ãã Mac ã§ããªã¼ãºããæãããæ°ããã¾ãï¼çµæ§ãã¾ãï¼ããå¼·å¶çµäºããéã¯ãååã® Node.js ã®ããã»ã¹ãçãã¦ãããããããªãã®ã§ ps ã³ãã³ãã§èª¿ã¹ã¦ kill ãã¦ä¸ããããWin çã¯å®å®ãã¦ããã¨æãã¾ãã
ä½¿ãæ¹
NodeJs ã¹ã¯ãªããã空ã®ãªãã¸ã§ã¯ãã«ã¢ã¿ããããã°ãScript Path ã§æå®ãã jsï¼StreamingAssets/.node/ 以ä¸ã®ãã¹ï¼ãè£ã§å®è¡ãã¾ãããµã³ãã«ãå®è¡ããããã«ã¯ npm ããã¢ã¸ã¥ã¼ã«ãã¤ã³ã¹ãã¼ã«ãã¦ãã«ãããå¿ è¦ãããã®ã§ãAssets/StreamingAssets/.node 以ä¸ã§ã³ãã³ããå®è¡ãã¦ä¸ããã
$ cd Assets/StreamingAssets/.node
$ npm install
ãã ããã«ãã«ã¯ Node.js ã®ç°å¢ã¨ãã«ãç°å¢ï¼Win ãªã Visual StudioãMac ãªã Xcode ã§ command line toolsï¼ãå¿
è¦ã§ãã
ä»çµã¿
åãæ¸ãã¾ãããå³ã«èµ·ããã¦ã¿ãã¨ãããªæãã§ãã

ãªã®ã§æ¹å¤ããã° Node.js ãããªãã¦ä½ã§ãåããã¦ãããã¨æãã¾ãã
é ããã©ã«ãã¨ãã«ãã«ã¤ãã¦
.hogehoge ã¨ãã "." ãã¬ãã£ãã¯ã¹ãã¤ããã£ã¬ã¯ããªã¯ Win ã§ã Mac ã§ã Unity ã«ãã£ã¦ãã³ãã«ããã¾ãããããã§ãã.nodeãã¨ãããã£ã¬ã¯ããªã Streaming Assets 以ä¸ã«ä½ããããã« js ã Node.js ã®ã¢ã¸ã¥ã¼ã«ãå ¥ãã¾ããããã«ãã£ã¦ Unity ã« js ãã³ã³ãã¤ã«ããããã¼ã¹ã¨ã©ã¼ã§æããããã¨ãã£ããã¨ããªããªãã¾ãã
ããããªããããã«ãæã«ãããåé¡ã«ãªã£ã¦ãã¾ããWindows ã§ã¯åé¡ãªã Streaming Assets ã®ä¸èº«ããã«ãå¾ã®ãã£ã¬ã¯ããªã¸ãã¹ã¦ã³ãã¼ãããã®ã§ãããMac ã ã¨ã³ãã¼ãããªãããã§ããããã§ãã«ããã¬ã¤ã¤ã¼ãã¤ãã©ã¤ã³ãå©ç¨ãã¦ããã«ãå¾ã®ãã¹ãããã»ã¹ã¨ã㦠.node ãã£ã¬ã¯ããªããã«ãå¾ã® Streaming Assets ãã£ã¬ã¯ããªã¸ã³ãã¼ããããã«ãã¦ãã¾ãã
Editor/PostprocessBuildPlayer
#!/usr/bin/perl my $installPath = $ARGV[0]; my $node_dir = "Assets/StreamingAssets/.node"; my $target_dir = "$installPath/Contents/Data/StreamingAssets/."; system "cp -r $node_dir $target_dir";
ä¸è¨ã§ã¯ Perl ã§ã³ãã¼ãã¦ã¾ãããUnity ããã¯åã«å®è¡ããã ããªã®ã§ Shebang ã§æå®ããããã°ã·ã§ã«ã¹ã¯ãªããã ããããªãã ããã大ä¸å¤«ãªããã§ãã
ãµã³ãã«ã§ä½¿ç¨ãã¦ããã©ã¤ãã©ãªã«ã¤ãã¦
- WebSocket: GitHub - NetEase/UnitySocketIO: socket.io client for unity3d.
- Socket.IO ã§ããã¨ãåºæ¥ã便å©ãªã©ã¤ãã©ãªã§ãããã Unity å´ãã Emit åºæ¥ãªããããªã®ã§ãåæ¹åã«ããã¨ããããå ´å㯠Node.js å´ã¯ socket.io ã®ä»£ããã« ws ã使ã£ã¦ websocket-sharp ã§ããã¨ãããã®ãè¯ãã¨æãã¾ãã
- OSC: https://github.com/keijiro/unity-osc
- OSC ã®ã¬ã·ã¼ãã¼ã§ããåãã Unity ããã®æ å ±ããµã¼ãã«ã¯éããªãã®ã§ãéãããæã¯
ãããã«
é¢ç½ãä½é¨ãå¦ä½ã«æ©ãä½ãããåãããæä»£ã ã¨æãã®ã§ãè¦æè¦æã«ä½¿ãããããã¼ã«ã使ç¨ããã®ã¯éè¦ã ã¨æãã¾ãããã å¥ã®ãµã¼ãããã¡ãã¡ç«ã¡ä¸ããã®ã¯é¢å...ãã¨ããæã«ãããã解決æ³ãæãããªãã¨æãã¾ããã