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.

ゲームエンジンとMVC

15,131 views

Published on

Published in: Technology
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❶❶❶ http://bit.ly/2F4cEJi ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ゲームエンジンとMVC

  1. 1. ゲームエンジンと MVC Aiming 大阪開発グループ 松田理孝
  2. 2. 自己紹介 ● 松田理孝(マツダヨシタカ) ● エンジニア ○ サーバやったりクライアントやったり ■ サポートやったりWebAPIやってたり ● いろいろやってます ● 使ったことあるゲームエンジン ○ Unity ○ Cocos2d-x ○ XNA(MonoGame) ○ Flash(ゲームエンジン?)
  3. 3. はじめに ● セッションの動機 ○ ゲームエンジンを活用する上でMVCは必須 ○ ゲーム業界ではMVCに対する理解が浅い
  4. 4. はじめに ● セッションの目的 ○ MVCとは何かを知ってもらう ○ ゲームエンジン別に設計が変わることを知ってもらう
  5. 5. アジェンダ 1. MVCとは 2. そもそもなんでMVCをするのか 3. MVCの各役割 4. MVCした後にできる事、すべき事 5. ゲームエンジンとMVC
  6. 6. MVCとは ● MVC(Model View Controller モデル・ビュー・ コントローラ)は、ユーザーインタフェースをもつ アプリケーションソフトウェアを実装するための デザインパターンである。 ○ Wikipediaより
  7. 7. お前は何を言っているんだ
  8. 8. MVCの前にPDS ● PDSとは ○ Presentation Domain Separation ● Presentation層 ● Domain層 ○ に分離して考える
  9. 9. PDSとは Domain層Presentation層 ● ドメイン固有言語 ● 汎用言語
  10. 10. ドメイン固有言語?
  11. 11. ドメイン固有言語とは ● ドメイン固有言語(ドメインこゆうげんご、英: domain-specific language、DSL)とは、特定の タスク向けに設計されたコンピュータ言語を意 味する。
  12. 12. お前は何を言っているんだ
  13. 13. ドメイン固有言語の例 ● とある表現を記述する事に特化した言語 ○ WEBだとHTML ○ FlashだとMXML ○ Cocos2d-xだとgui定義するlua ○ Unity ■ シーンファイル ○ 色んな所で ■ XML系(AXMLとか、XAMLとか) ■ JSONとか ○ makefile ■ makeに特化してる
  14. 14. PSDとは Domain層Presentation層 ● ドメイン固有言語 ○ HTML ○ XML ○ JSON ● 汎用言語
  15. 15. 汎用言語?
  16. 16. 汎用言語 ● プログラム言語、スクリプト言語 ○ C ○ C++ ○ Java/Scala ○ Haskell ○ C#/F#/VB ○ Python ○ ruby ○ PHP ○ JavaScript ○ ActionScript
  17. 17. PSDとは Domain層Presentation層 ● ドメイン固有言語 ○ HTML ○ XML ○ JSON ● 汎用言語 ○ C++ ○ C# ○ ActionScript 分離
  18. 18. 分離できたのは良いが ● P層だけではアプリはできない ● 同じくD層だけでもできない ○ makefileみたいなmakeのためだけに存在するドメイン 固有言語はD層なんか当然必要ないが ● ゲームクライアントのようなリッチなアプリケー ションは 繋ぐ必要がある
  19. 19. その繋ぎ方が MVCと呼ばれる テクニック
  20. 20. アジェンダ 1. MVCとは 2. そもそもなんでMVCPDSをするのか 3. MVCの各役割 4. MVCした後にできる事、すべき事 5. ゲームエンジンとMVC
  21. 21. 僕たちが基本無料でお金を稼ぐには
  22. 22. お金の前に時間を使って もわらないといけない
  23. 23. 逆に言うと、ユーザは 時間を使わないゲームに 課金はしない
  24. 24. 時間を使ってもらうために ユーザがストレスと感じるものは 排除(変更)する必要がある
  25. 25. 変更しようとすると ● 2種類のバグが出る ○ ロジックのバグ ■ そもそも正常に動かなくなった ■ 正しく操作しているのに落ちた ● 頑張って直してください ● そもそも出しにくくする ○ テストするとか ○ UXのバグ ● 正常に動作はしているけども...... ■ UIが使いにくくなった ■ ゲームバランスが崩壊した ■ 動作がもっさり、重い
  26. 26. なので
  27. 27. PDSをする理由 UIとロジックの疎結合を達成して、 実装やバグを分離するため。 (UIの変更ぐらいサクっとやりたい)
  28. 28. 疎結合 ● 情報システムにおいて,二つのシステムが緩や かに結びついた状態。システムどうしが標準的 なインターフェースに基づいて接続されているた め,一方が他方を容易に取り替えられる状態を いう。 ○ (weblioより)
  29. 29. つまりPDSとは 汎用型特化型 ● ドメイン固有言語 ○ HTML ○ XML ○ JSON ● 汎用言語 ○ C++ ○ C# ○ ActionScript ここのやり取りを 標準的なインターフェイスに基づいて 接続させる
  30. 30. やりたいこと GUI CUI struct Character { public int Level; public int HP; } class Battle { void Attack() { character.HP = 0; } } 標準的な インターフェイス
  31. 31. アジェンダ 1. MVCとは 2. そもそもなんでMVCPDSをするのか 3. MVCの各役割 4. MVCした後にできる事、すべき事 5. ゲームエンジンとMVC
  32. 32. MVCとか Model View Controller
  33. 33. MVCはPDSだと?? Domain層 (汎用) Presentation層 (ドメイン特化) Model View Controller
  34. 34.  Viewってこの中でどっち? GUI CUI struct Character { public int Level; public int HP; } class Battle { void Attack() { character.HP = 0; } } 標準的な インターフェイス
  35. 35. View ● ユーザが直接見る部分 ○ HTML ○ DirectX ○ MXML
  36. 36. MVCとはPDS化するためのテクニック Domain層 (汎用) Presentation層 (ドメイン特化) Model View Controller
  37. 37. Model ● (3Dとかのモデルではない) ● アプリケーションの処理を行う部分 ○ ダメージ計算したり ○ 座標計算したり ■ Modelって名前意味不明だよね ● PDSのDomainも意味不明だよね ● ロジックとか言われてる
  38. 38. MVCとはPDS化するためのテクニック Domain層 (汎用) Presentation層 (ドメイン特化) Model View Controller
  39. 39. Controller コントローラー
  40. 40. 今までの知識で MVCを整理
  41. 41. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller 黒い画面が 見える! ダメージは50やで
  42. 42. Controllerの仕事 1. ModelとViewの橋渡し a. ContollerはModelとViewを持っている
  43. 43. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller あんたらこれから 仲良しな まだ黒いよ? ダメージは50やで
  44. 44. Controllerの仕事 1. ModelとViewの橋渡し a. ContollerはModelとViewを持っている b. Viewが表示する内容を取得できるようにする
  45. 45. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller 50!! ダメージは50やで Controllerさんに教えてもらった Modelさんの計算結果見ちゃお 仲良し
  46. 46. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller まだ50だよ? 次のダメージは70やで 仲良し Modelの値が更新!
  47. 47. Controllerの仕事 1. ModelとViewの橋渡し a. ContollerはModelとViewを持っている b. Viewが表示する内容を取得できるようにする c. Modelの更新通知をViewに投げられるようにする
  48. 48. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller 70だ! 次のダメージは70やで 仲良し 更新したで 見に行くわ
  49. 49. さて、Controllerはどっち? Domain層 (汎用) Presentation層 (ドメイン特化) Model View Controller
  50. 50. そもそも分離の目的 ● 汎用言語側をライブラリ化したい ● 様々なUIで同じロジックを動かしたい
  51. 51. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller
  52. 52. Controllerは Viewを知らざるを得ない
  53. 53. さて、Controllerはどっち? Domain層 (汎用) Presentation層 (ドメイン特化) ModelView Controller Viewに引きづられて、 ViewとModelと繋ぐ
  54. 54. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller ModelもViewに引きづられて無い?
  55. 55. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller オブザーバパターン 更新したで 更新通知をViewに送るだけの インターフェイス
  56. 56. 疎結合 ● 情報システムにおいて,二つのシステムが緩や かに結びついた状態。システムどうしが標準的 なインターフェースに基づいて接続されているた め,一方が他方を容易に取り替えられる状態を いう。 ○ (weblioより)
  57. 57. ダメージポップ ユーザ HPゲージ ダメージ計算 オブザーバパターン 神ゲー!! アクション インターフェイスが一緒だから どこがどれに通知しても良い! レベルアップ
  58. 58. Viewのもう一つの役割
  59. 59. ユーザ View ユーザの見せる部分 Model 計算する部分 Controller ずっとダメージの数字ばか り流れてるけど、 僕も攻撃ボタン押したいな
  60. 60. View ● ユーザが直接見る部分 ○ HTML ○ DirectX ○ MXML ● ユーザが直接入力する部分 ○ ボタン ○ テキストボックス ○ タップ(クリック) ○ ドラッグ&ドロップ
  61. 61. ユーザ View 入力される部分 Model 計算する部分 Controller
  62. 62. Controllerの仕事 1. ModelとViewの橋渡し a. 描画部分 i. ContollerはModelとViewを持っている ii. Viewが表示する内容を取得できるようにする iii. Modelの更新通知をViewに投げられるようにする b. 入力部分 i. Viewによって呼ばれたイベントと、実際に行う Modelの処理を関連付ける
  63. 63. ユーザ View 入力される部分 Model 計算する部分 Controller そのボタン押されたら この計算関数呼びなさい
  64. 64. アジェンダ 1. MVCとは 2. そもそもなんでMVCPDSをするのか 3. MVCの各役割 4. MVCした後にできる事、すべき事 5. ゲームエンジンとMVC
  65. 65. ● ライブラリ化 MVCを理解した後にすべき事
  66. 66. 汎用言語側 ● ちゃんと動作保障できたDLL単位で分離できれ ば、資産になる ● コードを共通化することで保守部分が減る ● 車輪の再発明も少なくなる ライブラリ化の恩恵を 受けやすくなる
  67. 67. ドメイン特化言語側 ● ゲームエンジンUnityを使用しないツール ○ 汎用言語側を使いまわして作成 ● 運用ツールを効率よく作成 ○ .NETの十八番な ■ PowerShellでさえDLL使える ● 設定ツールを共通化 ○ 設定ツールが吐き出したテキストの読み書きのインター フェイスとかスタジオ内で共通化しても良いレベル ツール作成が楽に!
  68. 68. ● 実はPDSはクライアント側だけで適応される概 念ではない ライブラリ化
  69. 69. クライアント サーバ
  70. 70. サーバにおけるPDS Domain層Presentation層 ● ドメイン固有言語 ○ プロトコル ● 汎用言語
  71. 71. View ● クライアントから受け取る部分 ○ ユーザからイベントを受け取るのと一緒 ● クライアントへ通知する部分 ○ ユーザに見せるのと一緒
  72. 72. ● 実はPDSはクライアント側だけで適応される概 念ではない ○ 似たような考えはサーバでも必要 ○ プロトコル受け取った部分にロジックを書くのはナンセン ス ■ もっとも、この辺は最初の設計思想などが深く絡んで くるので、後からやりづらい部分もある ● そもそもフレームワークはこのレベルで考えてなきゃダメ ○ ツールでも使うもの多いよね ■ 確率とか調べるのツール絶対いるよね ● ガチャとかスキルとか ○ デバコマとかナンセンス ライブラリ化
  73. 73. ● ライブラリ化 ● IDEの使用 MVCを理解した後にすべき事
  74. 74. ● 統合開発環境 ○ VisualStudio ○ XCode ○ Eclipse ■ なんかいろいろある IDE
  75. 75. ● MVC化はそもそも単純にファイル数が増える ○ 手間を嫌ってMVCやらない選択肢は無い ○ ファイル数増える分を吸収するためにIDEを使う ■ ここにおけるGUIの威力って実は凄い ○ IDEだとGUI作成機能だってある ■ ゲームだとゲームエンジンによっちゃうけど ● 効率よく良い物を作り上げられる なぜIDEが必要か
  76. 76. ● 汎用言語を最大限活用できる ○ C#なんかは言語そのものがIDEにフレンドリー ■ 入力補完 ● 当然のようにエラー出ててもインテリセンス効く ● 型やスコープ、履歴から最適な候補を選んでくれる ● typoも補正してくれる ■ 自動実装系 ● スマートタブ ○ メソッドの自動実装 ○ クラス名から判断して自動でusing ○ インターフェイスや抽象クラスの自動実装 ● スニペット ○ for/foreachは当然 ○ switch(enum)で全case列挙してくれる ■ 当然break;まで なぜIDEが必要か
  77. 77. ● ライブラリ化 ● IDEの使用 ● テスト MVCを理解した後にすべき事
  78. 78. ● そもそもテストはテストが目的ではない ○ バグを出さないようにするのが目的 ■ チーム全体でバグを出さない自信があるならテスト は必要ない テスト
  79. 79. ● 単体テストしやすい環境って言うのもある ○ ただBooleanでやれば良いってモノでもない ○ 単体テスト書く時にIDEの力を借りると ■ テストファースト ● メソッド関数の自動生成機能とかある ■ テストのデバッグ ● ブレークポイント打つだけ ■ いくつか選択してテスト ● チェックリスト付けるだけ テスト
  80. 80. ● 他のテストとか ○ いろいろ各環境で考えなきゃいけない部分 ○ コストと成果のトレードオフ ■ 自動化!自動化! ● リファクタリング ○ PDSしてるとこの辺も楽になる ○ ロジックのリファクタリングは当然 ● 分離してれば各コンポーネント毎でタイマー使っ てパフォーマンス計測もしやすくなる テスト
  81. 81. ● ライブラリ化 ● テスト ● IDEの使用 ● インターフェイスのテンプレ化 ○ 開発者はとあるラインに沿って開発できるべき ■ 基本的にRailsと同じ方針 ● DryとかYagniとか良いと思う ○ この辺のインターフェイス作成は経験者の仕事 ■ ノウハウが活きる部分だと思う MVCを理解した後にすべき事
  82. 82. ● ツールの作成 ○ ロジックが分離できるメリットは大きい ■ rubyでもPythonでも ■ .NETならより幅広いリッチなツールが作れる ● Unity起動せずにオンライン戦闘デバッグとかできる ○ できるだけじゃなくて、楽にツールが作れるのが大事 ■ C++でもJavaでも ● ロジックなんて環境依存なもの少ないはず(だよね?)だから、コ ンパイラ依存少ないと思う MVCを理解した後にできる事
  83. 83. アジェンダ 1. MVCとは 2. そもそもなんでMVCPDSをするのか 3. MVCの各役割 4. MVCした後にできる事、すべき事 5. ゲームエンジンとMVC
  84. 84. ● ゲームエンジンによってMVCパターンは違う ○ ドメイン固有言語が変わるのだから当然 ○ というかそもそも設計方針が違う ● 今回紹介するエンジン ○ Flash ○ Unity ○ Cocos2d-x ゲームエンジンとMVC
  85. 85. ● やるべき事は一緒 ○ PDS ■ 見た目とロジックの分離 ○ すべてにおいて大事な概念 ■ ViewHelper ● XAML/C#だとコードビハインド ● 汎用言語で書かれるのが普通 エンジンごとに方針は違うが
  86. 86. ViewHelper テキストボックス View ViewHelper <GUI> <TextBox name=”textbox1”/> </GUI> TextBox textbox1; == textbox1 = getComponent(“textbox1”);
  87. 87. ViewHelper ほげふが~~ View ViewHelper <GUI> <TextBox name=”textbox1”/> </GUI> TextBox textbox1; == textbox1 = getComponent(“textbox1”); == textbox1.text = “ほげふが~~”;
  88. 88. ダメージポップ ユーザ HPゲージ ダメージ計算 オブザーバパターン 神ゲー!! アクション インターフェイスが一緒だから どこがどれに通知しても良い! レベルアップ
  89. 89. ViewHelperとModel なにもないよ ViewHelper Model class TextBox : IObserver { private TextBox textbox1; private Character character; public void Update() { textbox1.text = “HPは” + character.CurrentHP; } } class Character : Observable { public int CurrentHP { get; } public void Start() { CurrentHP = 50; Observable.Update(); } }
  90. 90. ViewHelperとModel なにもないよ ViewHelper Model class TextBox : IObserver { private TextBox textbox1; private Character character; public void Update() { textbox1.text = “HPは” + character.CurrentHP; } } class Character : Observable { public int CurrentHP { get; } public void Start() { CurrentHP = 50; Observable.Update(); } } 標準的なインターフェイス
  91. 91. ViewHelperとModel なにもないよ ViewHelper Model class TextBox : IObserver { private TextBox textbox1; private Character character; public void Update() { textbox1.text = “HPは” + character.CurrentHP; } } class Character : Observable { public int CurrentHP { get; } public void Start() { CurrentHP = 50; Observable.Update(); } }更新通知
  92. 92. ViewHelperとModel HPは50 ViewHelper Model class TextBox : IObserver { private TextBox textbox1; private Character character; public void Update() { textbox1.text = “HPは” + character.CurrentHP; } } class Character : Observable { public int CurrentHP { get; } public void Start() { CurrentHP = 50; Observable.Update(); } } 描画
  93. 93. ● IMXMLObjectインターフェイス ○ MXMLにタグ付けできるViewHelper ○ あんまり使ってるとこ見たこと無い ■ というかMXMLのscriptに直接書く人いる ● そりゃスパゲティになる Flash
  94. 94. ● MonoBehaviour ○ 実際に動くモデルに付随する「ViewHelper」 ■ コルーチンを使うロジックなんかにも使うけど ○ 当然ここにロジックを書くべきではない ■ 結構やっちゃいがち ● 物理エンジンとの棲み分けもあるし ■ というかサンプルが微妙い Unity
  95. 95. ● 自前のViewHelper ○ ViewHelperを作りやすい構造は必須 ■ ただどうしてもViewの要素が多くなるとしんどい ● Flashでも変わらないけど ○ 自前で書くハードルが高い ■ というか知識が無いのにいきなり書けない ● MonoBehaviour,IMXMLObjectみたいに用意されてない Cocos2d-x
  96. 96. ● イマドキの開発でPDSの考え方は必須 ○ みなさんP層にロジック書いてませんか? ○ どうしようもなくてstaticにしてませんか? ● IDEのサポート受けていこう ● MVCは使う環境に則った方針でやる ○ 新しいエンジン触るときはまず最適解を ■ あとから変更とか絶対無理 ● 経験ある人の大仕事 ○ ViewHelperを作ろう まとめ
  97. 97. ● 理想 ○ UIデザイン ■ デザイナーがダミーデータでUI/モーションを作る ■ エンジニアが繋ぎこむ ■ 完成 ● デザイナーさんの協力も必須になってくる ○ そもそも無くしたい ■ 突然ボタンが効かなくなるとか ■ 旧コンポーネントの使い勝手が悪いから新コンポー ネントへの移行とか ● 旧コンポーネントがそもそも改修できないとか ■ 似たUIなのに挙動が違うとか ● なんで同じの数回も実装してんの? 将来的には
  98. 98. Let's 疎結合
  99. 99. おまけ Aiming 大阪開発グループ 松田理孝
  100. 100. P層はプラットフォームごとに別 Domain層 (汎用) Presentation層 (ドメイン特化) ModelView Controller 環境依存で共有化できない
  101. 101. Mvvm Cross
  102. 102. Model-View-ViewModel Domain層 (汎用) Presentation層 (ドメイン特化) ModelView ViewModel View用のモデル
  103. 103. ViewModelとは ViewModel View ● 汎用言語 ● 使用するModelの読み込み ● Viewに合わせて変換 ○ enum Week.Sunday ■ 日本:日曜日 ■ 英語:Sunday データバインディング
  104. 104. Mvvm Crossとは ● Xamarin(Mono)で使われる技術 ● Crossのとおり、マルチプラットフォームで MVVMを達成しようというやつ ○ Windows(.NET) ○ MacOS X ○ Android ○ iOS
  105. 105. Viewは各プラットフォームに合わせる ● Windows:XAML ● Android:AXML ○ XamarinのAndroidのUIエディタ凄い良い ● iOS:StoryBoard
  106. 106. どこを共通化するか ModelView ViewModel 汎用言語(C#)部分
  107. 107. Portable Class Library(PCL) ● PortableなDLL ● iOSやAndroidなんかでも使えることを保障 ○ 自作できる ■ 自分でどの環境に対応させるか選べる ● DLLごとコピペ移動で使える
  108. 108. PCLで共通化 ModelView ViewModel Portable Class Library
  109. 109. MvvmCross ModelView ViewModel Portable Class LibraryView View Mvvm Cross ViewModelも共有化できる!
  110. 110. ご静聴ありがとうございました

×