Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

インフラエンジニアがUnityをやるべきたった一つの理由

108,891 views

Published on

インフラエンジニア、特にネットワークエンジニアさんもデモをする時はpingだけでなく、もうちょっと派手は演出のデモしたら?Unityで簡単に作れまっせ、って話しです。

Published in: Technology
  • Be the first to comment

インフラエンジニアがUnityをやるべきたった一つの理由

  1. 1. インフラエンジニアが Unityをやるべき たった1つの理理由 株式会社あくしゅ ⼭山崎泰宏
  2. 2. 【質問】 このネットワークエンジニア達は ⼀一体何を喜んでいるでしょうか?
  3. 3. 答え
  4. 4. やったー! pingが通ったー!
  5. 5. 脳内のイメージ
  6. 6. 実際
  7. 7. $ ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1): 56 data bytes 64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=4.306 ms 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.542 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.475 ms --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 1.475/2.441/4.306/1.319 ms $
  8. 8. この喜びをデモしたい
  9. 9. 映画だって⾶飛び出したらみんな喜ぶんだ! そうか!3Dにすればいいんだ!
  10. 10.            …って何だ? •  ゲームエンジン&オーサリングツール – 主に2Dや3Dのゲームが作れる – JavaScriptかC#でコードを書く – Windows/Mac/Linuxや、ブラウザ上のプラグ イン形式へクロスコンパイルしてバイナリを ⽣生成できる •  商⽤用はライセンスが必須 •  追加ライセンスで、iPhoneやAndroidへも出⼒力力可能
  11. 11. 弊社のお仕事
  12. 12. データセンターの仮想化を 真⾯面⽬目に⽬目指している会社
  13. 13. クラウド基盤ソフトウェア Wakame-vdc
  14. 14. 仮想ネットワーク技術 OpenFlow 1.3を駆使し 物理理ネットワークの上で 仮想ネットワークを ⾃自由⾃自在にオーバレイするもの
  15. 15. OpenVNetの デモ⾒見見せてよ!
  16. 16. $ ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1): 56 data bytes 64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=4.306 ms 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.542 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.475 ms --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 1.475/2.441/4.306/1.319 ms $
  17. 17. ・・・
  18. 18. くやしいから作ったよ!
  19. 19. Unityで作った ビジュアライズ画⾯面 L2 Switch Web Web LB Packet Capture イベント配布⽤用 TCP Server 豪華なpingのアーキテクチャ デモしたい実際の環境
  20. 20. ビジュアライズの部分だけ 御覧ください (Demonstration)
  21. 21. Packet Capture (Ruby) 抜粋 sock = TCPSocket.open(config['server'], config['port']) packet_dump = Pcaplet.new("-i #{options[:tap]}") filter = Pcap::Filter.new("dst #{options[:ip]}", packet_dump.capture) packet_dump.add_filter(filter) packet_dump.each_packet do |pkt| if pkt.ip? && pkt.ip_dst.to_s == options[:ip] sock.puts("#{options[:instance_name]}") end end packet_dump.close イベント配布⽤用TCP Serverへの接続 TAPデバイスのキャプチャ 必要なパケットのフィルタリング イベント配布⽤用TCP Serverへ送信
  22. 22. イベント配布TCP Server (Ruby) 抜粋 server = TCPServer.open(config.port) unity_socket = nil while true s = server.accept if not config.accept_addr_list.include?(s.remote_address.ip_address) unity_socket = s p "unity connected." else Thread.start(s, unity_socket) do |socket, unity_socket| while buffer = socket.gets unity_socket.puts(buffer) end socket.close end end end 各Packet Captureクライアントから 送られてきたメッセージを Unityのソケットへ届けるスレッド
  23. 23. 残るビジュアライズ部分は どうやって作るのか •  ⼿手順 1.  3D空間をデザインする (モデリング) 2.  Unityに配置してスクリプトを記述する •  TCP Serverへのネットワークプログラミング 3.  各OSプラットフォームへバイナリを出⼒力力する •  必要な知識識 –  ゲームエンジンの仕組みに対する理理解 –  ⾏行行列列計算や三⾓角関数などの簡単な数学 –  JavaScriptかC# •  とりあえずUnityのライブラリが分かれば良良い
  24. 24. まずはモデリング オブジェクトを作る⼯工程のこと。今回はBlenderを使って作成したものをUnityにImport。
  25. 25. Unityの「ゲームエンジン」って そもそも何? •  イベントドリブンの仕組みを備えた シーングラフ – カメラや空間に存在するオブジェクトを、 ツリー構造で表現したもの – 世界で起こることを統括し、イベントとして オブジェクトに伝達する機構を持つ •  オブジェクト同⼠士の衝突など
  26. 26. オーサリングツールの画⾯面
  27. 27. シーングラフ
  28. 28. クラスとなるスクリプトを書く 例例えばキー⼊入⼒力力を判定する コードを書いて… ESCが押されたら アプリケーションを終了了する!
  29. 29. カメラオブジェクトにくっつける オブジェクトを選択して… 作成したスクリプトを… オブジェクトの中に組み込む
  30. 30. カメラオブジェクトが有効な間は ESCを押すとアプリが終了了する
  31. 31. ゲームエンジンの基本構造 ゲーム エンジン シーンを構成する オブジェクト達 シーンを構成する オブジェクト達 シーンを構成する オブジェクト達 イベントに応じた スクリプト イベント イベントに応じた スクリプト イベントに応じた スクリプト
  32. 32. オブジェクトに対するイベント例例 •  オブジェクトの初期化や破棄の時 •  他のオブジェクトと衝突した時 •  描画される時 などなど このような様々なタイミングで、 ゲームエンジンがオブジェクトに備わっている関数を呼び出してくれる。 そこに便便乗して、⾃自分の任意のコードを実⾏行行する。
  33. 33. TCP Serverへの接続⽅方法 この中⾝身に連動するように 関数をコールするだけ Startはオブジェクト初期化の際に呼ばれる
  34. 34. キーボードを叩いたのと同様に 光らせる アニメーションの トリガを引く⾃自作関数 キー⼊入⼒力力の場合 Updateはフレーム描画毎に呼ばれる
  35. 35. 各オブジェクトのパラメータを変更更し、 光らせるエフェクトなどを発動させる
  36. 36. バイナリを 出⼒力力する •  クロス プラットフォーム –  Web Player –  Windows, Mac & Linux –  iOS, Android –  etc... Monoが使われている様⼦子
  37. 37. Unityで作った ビジュアライズ画⾯面 L2 Switch Web Web LB Packet Capture イベント配布⽤用 TCP Server 豪華なpingできたー! デモしたい環境
  38. 38. ⼀一番⼤大切切な実際の反応 「おおおおおおお…」
  39. 39. まとめ •  インフラエンジニアは動いて当たり前の ものを扱う悲しい⽣生命体 – 「当たり前」をデモしなければならない – pingを打つたびに⼈人が眠る •  デモは派⼿手に!楽しく! – Unityを使えば、パケットの動きに連動した 豪華な3Dアニメーションも作れる! – エンジニア同⼠士が「おおー!」と⾔言ったあの 瞬間を、そうじゃない⼈人とも共有しよう!

×