More Related Content Similar to ゲームエンジンとMVC (20) More from AimingStudy (13) ゲームエンジンとMVC2. 自己紹介
● 松田理孝(マツダヨシタカ)
● エンジニア
○ サーバやったりクライアントやったり
■ サポートやったりWebAPIやってたり
● いろいろやってます
● 使ったことあるゲームエンジン
○ Unity
○ Cocos2d-x
○ XNA(MonoGame)
○ Flash(ゲームエンジン?)
7. MVCとは
● MVC(Model View Controller モデル・ビュー・
コントローラ)は、ユーザーインタフェースをもつ
アプリケーションソフトウェアを実装するための
デザインパターンである。
○ Wikipediaより
26. 変更しようとすると
● 2種類のバグが出る
○ ロジックのバグ
■ そもそも正常に動かなくなった
■ 正しく操作しているのに落ちた
● 頑張って直してください
● そもそも出しにくくする
○ テストするとか
○ UXのバグ
● 正常に動作はしているけども......
■ UIが使いにくくなった
■ ゲームバランスが崩壊した
■ 動作がもっさり、重い
77. ● 汎用言語を最大限活用できる
○ C#なんかは言語そのものがIDEにフレンドリー
■ 入力補完
● 当然のようにエラー出ててもインテリセンス効く
● 型やスコープ、履歴から最適な候補を選んでくれる
● typoも補正してくれる
■ 自動実装系
● スマートタブ
○ メソッドの自動実装
○ クラス名から判断して自動でusing
○ インターフェイスや抽象クラスの自動実装
● スニペット
○ for/foreachは当然
○ switch(enum)で全case列挙してくれる
■ 当然break;まで
なぜIDEが必要か
82. ● ライブラリ化
● テスト
● IDEの使用
● インターフェイスのテンプレ化
○ 開発者はとあるラインに沿って開発できるべき
■ 基本的にRailsと同じ方針
● DryとかYagniとか良いと思う
○ この辺のインターフェイス作成は経験者の仕事
■ ノウハウが活きる部分だと思う
MVCを理解した後にすべき事
83. ● ツールの作成
○ ロジックが分離できるメリットは大きい
■ rubyでもPythonでも
■ .NETならより幅広いリッチなツールが作れる
● Unity起動せずにオンライン戦闘デバッグとかできる
○ できるだけじゃなくて、楽にツールが作れるのが大事
■ C++でもJavaでも
● ロジックなんて環境依存なもの少ないはず(だよね?)だから、コ
ンパイラ依存少ないと思う
MVCを理解した後にできる事
86. ● やるべき事は一緒
○ PDS
■ 見た目とロジックの分離
○ すべてにおいて大事な概念
■ ViewHelper
● XAML/C#だとコードビハインド
● 汎用言語で書かれるのが普通
エンジンごとに方針は違うが
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. 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. 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();
}
}更新通知
93. 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();
}
}
描画
98. ● 理想
○ UIデザイン
■ デザイナーがダミーデータでUI/モーションを作る
■ エンジニアが繋ぎこむ
■ 完成
● デザイナーさんの協力も必須になってくる
○ そもそも無くしたい
■ 突然ボタンが効かなくなるとか
■ 旧コンポーネントの使い勝手が悪いから新コンポー
ネントへの移行とか
● 旧コンポーネントがそもそも改修できないとか
■ 似たUIなのに挙動が違うとか
● なんで同じの数回も実装してんの?
将来的には