【AN-5】Android でリアルタイムゲームを開発する方法:リベンジ - クリス プルエット
Androidでのゲーム開発手法、プランニング、Android Marketなどの説明です。
クリスのAndroidゲーム「ワンダのレプリカ島」をリリースしてから参考になったことを含めてセッションで話したい。"楽しいゲームには「革新」より「面白さ」のほうが大事である"
開発者の気になるポイント
- 端末の種類が多いこと。
- パフォーマンスが出ないと困るのがゲーム。
それぞれの端末への対応は?と心配になることが多い。
今までのAndroidは2つの世代に分かれる。
第1世代と第2世代
- 第1世代:HT-03A,CPU 400MHz,MSM7200Aなどが多い。グラフィックスはOpenGL ES1.0
- 第2世代:Xperia,CPU 1GHz,Snapdragon/OMAP3など。グラフィックスはOpenGL ES2.0
→第2世代では30FPS以内で3万頂点を描画できる程度の処理能力。
端末の特徴
インプットが豊富:トラックボール、十字キー、キーボード、マルチタッチ、すべて使える
Androidは十字キーがなくても、インプットは成り立つ。
Android端末のパフォーマンスを高める方法
Android用のベンチマークソフト
30FPSを下回ると、ユーザが反応遅いと感じてしまう。
Xperiaは画面描画に同期が入っているため、30FPSで固定されている。
30FPSを守ろうとすると処理限界は大体3万頂点程度。
スレッド分割
処理の効率化を図る上でスレッド分割が不可欠。
ActivityをGameThreadとRenderingThreadに分割する。
XperiaだとRenderingThreadが描画命令発行後、32msは帰ってこない。
GLSurfaceViewを使うのがとても簡単。
NDKを使ってもよい。重いコードはC/C++に移植してしまえば高速化できる
EGL Context And Pausing
環境依存の部分をまとめたインターフェイスがEGL。
OpenGL ES自体は環境に依存しない標準APIの集まりなので、環境依存の部分を集めておく。
EGLのContextを失うタイミングがあり、それは新たなActivityの生成時である。
しばらくしてから元のゲームに戻るとVRAMが初期化されてしまう、といった問題が発生する。
「ワンダのレプリカ島」では、キャラクターの会話するウィンドウ(TextBox)を別のActivity化している。
人がしゃべるタイミングでVRAMが解放されてしまうと困るので、
GLSurfaceViewを細工してVRAMを解放しないようにした。
プランニング
ワンダのレプリカ島の最初の4カ月、100日で100万ダウンロード
一番大事なのが操作システムのセッティングが必要ということ。
ユーザの好み、操作感が大切。変更ができるように、柔軟な設計を。
→ Input Interfaceを用意して変換するなど新しいインターフェイスを定義した。
(Input Interfaceを追加した図)
開発のためのエディタなどPHPやJavaで作ったがマップ作成などが面倒。
今回は"クソコード"(会場笑い)なマップエディタなどでやり過ごすことができたが…
悩ましい部分。