*この記事は以下の記事の日本語訳を許可を得て掲載しています。Optimizing Games for Low-End Devices
モバイルゲーム開発におけるもっとも困難な事のひとつは、ハイエンドデバイス上で実行したときの体験を損なうことなく、ローエンドデバイス上でゲームをうまく実行させることです。
これにはいくつものよい理由付けがあります。よりよいマネタイゼーション、より多くのユーザーにエンゲージできる、などなど。ハイエンドデバイスが注目を集めることで、ローエンドデバイスの優先度合いは一見下がっていっているかのように見えます。しかし、彼らはいまだ重要です!最近のMixpanelのトレンド調査によると、iPhoneユーザーの10%ちかくはiPhone5か、それ以下の機種を利用しています。
古いデバイス上で新しいデバイスと同じグラフィックを出すことができるか?
率直に言って無理です。プレイヤーにはあらゆるデバイスで、同等の経験をしてもらいましょう。つまり、ハイエンドデバイスを使うユーザーたちと同じ、コアとなる経験ができるようにしてください。完全に同じではないかもしれませんが、コアとなる経験は近くあるべきです。
ローエンドデバイスのための最適化テクニック
- プロジェクトの最初期の段階で、ローエンドデバイスについて考慮しておきましょう。実際にローエンドデバイス上でのテストを繰り返し、又はゲームフィーチャーが追加された場合に、行いましょう。
- デバイスを、ロー、ミドル、ハイクオリティ、といった具合にカテゴライズしましょう。例えば、iPhone6sはハイエンド、Samsung Galaxy 3はローエンドなどと言ったように。このリストは新しいデバイスが発売に合わせて継続的に変化します。それぞれのデバイスのスペック、チップセット、メモリ容量、GPUなどを把握しておく事が重要です。
- Unityが持つクオリティセッティングを活用しましょう。Edit->Projects->Qualityから設定できます。必要なだけクオリティレベルを追加して、必要に応じてカスタマイズできます。Low, Medium, and Highの3種類がおすすめです。Unityは、各レベルで設定可能な多くの項目を持っています。これは3Dゲームの開発にとても効果的ですが、2Dのゲームにはそれほどではありません。
- デバイスの能力に応じたアセットを使いましょう。ハイエンドデバイスではHD解像度、ローエンドデバイスでは標準解像度と言った具合に。これによってメモリフットプリントとパフォーマンスの両方に恩恵があります。(FPSの向上。メモリ不足によるクラッシュの緩和)。iOSのapp-thinningテクニックやUnityのasset bundleを利用することができます。
- クオリティセッティングに応じたコードパスを実行しましょう。例えば、表示・非表示する時にアニメーションするダイアログの場合、ローエンドデバイスではそれを無効化する、などです。
- マスクやアルファテクスチャを無効にしましょう。これらはゲームのFPSに大きな影響を及ぼします。
- デバイスに応じた振る舞いを決めるゲーム独自の関数を用意しましょう。例えば「どのアニメーションを再生するか?」「どのPFXを使うか?」「サウンドを無効化するか?」
- ローエンドデバイスでは並列HTTP接続は少なくしましょう。これによりCPUスレッドの使用率を下げることができます。また一般的にHTTP接続を控えることは、バッテリーの節約にもなります。
- ローエンドデバイス用のカスタムシェーダを用意して、余計なパスや機能を制限しましょう。例えばローエンドデバイスでは洗濯時のアウトライン描画は行わずに、ゲーム自体の進行を妨げないようにします。
- ゲームエンジンのプロファイラーを使ってパフォーマンスのボトルネックを見つけましょう。ローエンドデバイスでプロファイルを行うことを忘れないでください。
自由にコメントをください。私達の持つデータやコードスニペットも喜んで共有しましょう。