Unityが公式に発行しているeBook"Optimize Your Mobile Game Performance"を読み解いていこう!という企画で、今回はプロジェクト設定編です。(前回はProgramming and code architecture編)
この章も短いのでサクッといってしまいましょう!
Project configuration
モバイルのパフォーマンスに影響を与えうる、いくつかのプロジェクト設定があります。
アクセラメーターを無効化するか、周波数を減らそう
Unityは一秒間に数回、モバイルのアクセラメーターの値を蓄えます。使わない場合はこれを無効化し、あるいはパフォーマンスを良くするために周波数を減らしましょう。
必要ないPlayer設定、Quality設定を無効にしよう
Player設定で、サポートしていないプラットフォームにおいてはAuto Graphics APIを無効化して、無駄なシェーダー変数の生成を防ごう。
もしあなたのゲームがサポートしないのであれば、古いCPUに対するTarget Architectureを無効化しよう。
Quality設定で、必要のないクオリティ・レベルは無効化しよう。
必要ない物理演算を無効に
もし、あなたのゲームが物理を使っていないのなら、Auto SimulationとAuto Sync Transformsを無効にしよう。これらは何の恩恵も無しに、ただただアプリケーションを遅くするだけです。
正しいフレームレートを選択しよう
モバイルプロジェクトにおいて、必ずバッテリー残量、廃熱とフレームレートのバランスを取らなければなりません。
60FPSまで制限を押し上げる代わりに、30FPSでの動作に妥協することを考慮してください、Unityでのモバイル動作のデフォルト設定は30FPSです。
Application.targetFrameRateを使って、動的にフレームレートを調整することが可能です。例えば、ゆったりとした、比較的変化のないシーンにおいて、30FPSで動作させ、ゲームプレイでは高FPS設定を使う、ということも出来ます。
大きなヒエラルキーを避けよう
ヒエラルキーを分割しよう!ヒエラルキー上でネストする必要がないゲームオブジェクトは、親子関係を単純化しよう。
マルチスレッディングによる、シーン上のTransformの更新は、浅いヒエラルキーの方が処理が速いです。
ヒエラルキーが複雑な場合、必要のないTransformの計算と、ガベージコレクションに対する更なるコストを生み出します。
Transformに対する、最高の実践を学ぶために、ヒエラルキーの最適化とUniteでの講演を確認してください。
二度ではなく、一度にTransformする
Transformを移動させる時は一度に位置と回転を更新するために、Transform.SetPositionAndRotationを使おう。
player.transform.SetPositionAndRotation(targetPosition, targetRotation);
これによって、Transformを二度変更することによるオーバーヘッドを避けることが出来ます。
ランタイム中にゲームオブジェクトをInstantiateする必要がある場合、Instantiateメソッド内で、位置や親子関係、回転を指定するのがシンプルな最適化です。
Instantiate(prefab, parent);
Instantiate(prefab, parent, position, rotation);
Vsyncが有効であると想定しよう
モバイル・プラットフォームでは、半フレームはレンダリングしません。エディターのQuality設定でVsync(垂直同期)を無効にしていたとしても、ハードウェア上ではVsyncは有効です。
もし、GPUが十分、高速に更新できない場合、あなたのFPSは影響があるほどに減少し、現在のフレームは保たれるでしょう。
というわけで、プロジェクト設定編でした。短いながらも、直ぐにでも実践できる内容が多く含まれており、大変タメになりました。
次回はAssets編です。各種アセットをどう取り扱うか、という部分で細かいながらも重要な部分だと思うので、気合入れてやっていきたいと思います!