68
ゲーム開発初者の僕が Unity + WebSocket を使って何かつくってみた 2011/10/22 第3回 HTML5など勉強会 @kadoppe 1

ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた

Embed Size (px)

DESCRIPTION

2011年10月22日に大阪で開催された「第3回 HTML5など勉強会」での発表に使ったプレゼン資料です。

Citation preview

  • 1. Unity + WebSocket2011/10/22 3 HTML5@kadoppe 1

2. ! kadoppe ! Twitter twitter.com/kadoppe ! Blog www.kadoppe.net! ! iOS, WebRails, Node.js, etc! HTML5-West.jp ! about.me/kadoppe 2 3. ! ! WebSocket! ! SocketStream! 3 4. ! ! Unity, WebSocket! Unity + WebSocket ! 4 5. 5 6. 6 7. UnityA. B. C. 7 8. WebSocketA. B. C. 8 9. WebSocket! WebSocket! HTML5! Web/ ! Comet! /! W3C, IETF9 10. ! ! WebSocket! 10 11. Unity! 10x ! A, Unity ! Unity 11 12. Unity! Unity Technologies + ! ! ! ! ! 12 13. 13 14. ! ! Web ! Unity Web Player ! Windows, Mac OS X ! Wii, PS3, XBox 360 ! iOS, Android 14 15. Pro Unity Pro Windows, Mac, Unity(136,000)WebUnity iOS Unity iOS Pro iOS (iPhone, iPad) (36,500) (136,000)Unity Android Unity Android Pro Android (36,500 ) (136,000) Pro: 15 16. Unity! Scene ! ! Game Object ! ! ! Script ! Game ObjectGame Object 16 17. UnitySceneScript MaterialGame Object Component 17 18. ! JavaScriptUnityScript ! JavaScriptOOP! C# ! UnityMono.NET! Boo18 19. 19 20. Unity + WebSocket! Unity! WebSocket! Web 20 21. Unity + WebSocket 21 22. ! 1 ! UnityWebSocket! 2 ! 22 23. ! ! ! ! C ! ! ! 23 24. Unity! 1016! ! Unity ! SoftBank Creative ! () ! Unity 24 25. ! 1017 ! 25 26. ! 1018 ! 26 27. ! 1019 ! 27 28. ! 1020! Unity! Chapter 1 Unity! Chapter 2 ! Chapter 4 ! Chapter 5 ! ! ! 28 29. 29 30. ! 1021 7:00AM! Hackathon 30 31. ! 7:30 AM! PONG 31 32. WebSocket ServerUnityUnityPlayer A Player B 32 33. ! 7:35 AM 1. 1PONG 2. UnityWebSocket 3. 4. 33 34. PONG! 9:30 AM ! ! ! /! ! 34 35. 35 36. ! Ball.js! ! MyPaddle.js! ! Goal.js! 36 37. Ball.js// function Start () { // rigidbody.AddForce(Vector3(0, 0, -1) * 4, ForceMode.VelocityChange);}37 38. Goal.js// function OnTriggerEnter(other : Collider) {// if (other.gameObject.tag == "Ball") { // var respawn : GameObject = GameObject.FindWithTag("Respawn"); other.gameObject.transform.position = respawn.transform.position;}} 38 39. MyPaddle.js// function Update () { // var velocity = Vector3(Input.GetAxis("Horizontal"), 0, 0); controller.Move(velocity * Time.deltaTime * 2);}39 40. WebSocket! 10:10 AM! ! UnityWebSocket! WebSocket API! ! .NETSocket C#WebSocket 40 41. C#WebSocket! SuperWebSocket ! http://superwebsocket.codeplex.com/ ! WebSocketC# ! ! websocket-sharp ! https://github.com/sta/websocket-sharp ! ! 41 42. Unity ! ! Plugins! .dllMac! .csC#42 43. SuperWebSocket! 10:30 AM! ! Plugins.dll ! ! .dll.cs 43 44. SuperWebSocket! 10:45 AM ! ! Unity #if SILVERLIGHT #if NET35 (A) (A) #else#else B B #endif #endif 44 45. ! 11:10 AM! UnityWebSocket ! ! Node.js ! Node WebSocket Server ! Node.jsWebSocket 45 46. app.js// var http = require(http);var ws = require("websocket-server");// var httpServer = http.createServer();var wsServer = ws.createServer({server: httpServer});// wsServer.addListener("connection", function(connection) { console.log(connected); // }wsServer.listen(80);46 47. ! 11:30 AM! ! Connected! ! ! UnityWebSocket! ! UnityWebSocket 47 48. ! 12:00 PM ! 48 49. ! 5:00 PM ! ! 6:30 PM ! SuperWebSocket ! websocket-sharp! 7:30 PM orz49 50. UnityWebSocket ! Server.cs ! SocketC#public class Net : MonoBehaviour { void Awake () { // WebSocket ws = new WebSocket("ws://127.0.0.1:80/"); ws.OnOpen += (o, e) => { // Debug.Log("Open"); }; ws.Connect(); // }} 50 51. ! 7:55 PM! ! ! ! ! 51 52. app.jsvar playerBlue, playerRed;var count = 0;wsServer.addListener("connection", function(connection) {switch (count) {case 0: playerBlue = connection; playerBlue.send(JSON.stringify({type:color, value:Blue})); // break;case 1: playerRed = connection; playerRed.send(JSON.stringify({type: "color", value: "Red"}));}count++;});52 53. ! 8:15 PM ! ! UnityJSON! LitJSONC#! http://litjson.sourceforge.net/ 53 54. Client.jsUnitypublic class Client: MonoBehaviour { void Awake () { // () ws.OnMessage += (o, s) => { // Message message = JsonMapper.ToObject (s); // if (message.type == "color") { ( } }; () }}54 55. ! 8:45 PM ! ! ! ! Can only be called from the main thread 55 56. ! GameObject! websocket-sharp! OnMessage! GameObject 56 57. ! 10:45 PM! OnMessage 57 58. Client.csUnitypublic class Client: MonoBehaviour { private Queue messageQueue; void Awake () { // messageQueue=Queue.Synchronized(new Queue()); ws.OnMessage += (o, s) => { messageQueue.Enqueue(s); // }; } void Update() { // lock(messageQueue.SyncRoot) { // // } // }}58 59. ! 11:00 PM ! ! 11:15 PM ! ! 11:30 PM ! 59 60. Web! 11:45 PM ! Web Player! Mac OS X ! ! SecurityException: Unable to connect, as no valid crossdomain policy was found60 61. ! ! Unity Web Player843 ! 80 ! Mac OS X 61 62. Client.csUnitypublic class Client: MonoBehaviour { private Queue messageQueue; void Awake () { // // WebSocket Security.PrefetchSocketPolicy (127.0.0.1, 80); ws.Connect(); }}62 63. app.jshttpServer.on(connection, function(socket) { // socket.addListener("data", function(data) { // policy-le-request if (data.toString("utf8").match(/policy-le-request/)) { // policry-le socket.write( domain-policy>, utf8); } });});63 64. ! 1022 1:00 AM ! ! ! 1022 6:00 AM ! ! 64 65. Demo 65 66. ! ! ! ! ! ! 66 67. ! Unity! ! WebSocket! Web! Unity + WebSocket! ! Web! Lets try!!67 68. 68