GDD2010:Android でリアルタイムゲームを開発する方法: リベンジ
Android でリアルタイムゲームを開発する方法: リベンジ
クリス プルエット
クリスさん
端末の種類
- ゲームアプリは、パフォーマンスが気になる。端末重要。
- 端末が多くなると、対応が難しいのではないか?
- 端末の種類が多いが、大きく分けると2つの世代に分かれる。
- 端末が多くなると、対応が難しいのではないか?
第1世代(古い端末)HT-03A相当
だいたいQualcommMSM7200A 400MHzぐらい
HVGA
OpenGLES1.0
30ヘルツないに5000頂点
60ヘルツで1024頂点は問題ない第2世代
500-1000MHz
OpenGL2.0
2.0になるとシェダーが使える
ハードウェア補助
WVGA
30ヘルツ 3万頂点
30ヘルツを超えられない端末も存在。
端末の特徴
Android端末のバージョン
- ほとんどが2.1か2.2
- マルチタッチ(2.1〜)などの機能要件によって、対応バージョンが決まる。
- 1.6から画面サイズ対応
- クリスさんのゲームは、1.5ベースで開発して、全バージョンに対応するのはそれほど難しくなかった。
LODの価値
- 奥のものを簡単に描画するテクニック
- 描画数を大幅に減らせるので、パフォーマンスを稼げる。
- ゲーム会社は普通に使ってる技。
- かなりきれいな画面が作れるはず。
パフォーマンスを高める方法
- ★必ずVBOを利用
- パフォーマンスが大きく上がる。
- VBOの数を減らす
- 浮動小数点数の頂点を利用
- FIX POINTより速い
- テクスチャコンプレッションならETC1
- 2DならOpenGLのdraw_textureエクステンション
- 30ヘルツで遊べるようにプランニング
- 第一世代端末から第2世代端末までランタイムでスケール
- GL_EXTENSIONSは役立つ
- 第2世代のみの端末を狙うゲームならGLES2.0を利用
"ワンダ"の実装事例
- 2つのスレッドの仕組み
- GLSurfaceViewが便利
- NDKで高速化
- アプリがポーズしたときの対策
- ゲーム中にRAMがクリアされたときの対策が必要
- 中断してほしくない場面は、GLSurfaceViewをいじって復帰対策をした。
学んだこと
- 操作設定は必要
- キーコンフィグレーション
- 端末ごとについてるボタンが違うので、これをつけると好評だった。
- 最初から考慮しておかないと、あとからつけるのは大変だと思う。
- キーコンフィグレーション
- InputSystemを、InputInterfaceクラスと分離することで、設定を分離した。
- ゲーム側のコードを変えずに入力の幅を広げられる
- これって面白いだろうか?
- Webサーバーをつけた
- デザインをちょこっと変えたいときに、シェーダーのデータを流し込めるようにする。
ゲームを作るにあたって
- ”楽しいゲームには「革新」より「面白さ」のほうが大事”
- Jonathan Blow, author of Braid
Androidマーケット上のゲームダウンロード回数
- 5月からゲームのダウンロード回数が大幅に増えた
- ダウンロードラインキングは全ジャンル中2位
- Androidユーザーの一番関心があるのがゲーム。
- Liteバージョンがほとんどの場合用意してある。
Useful Links
- SpriteMethodTest HightMapProfiler
- http;//replicaisland.net
- ソースコード、ブログなど