Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Project configuration編 Unity eBook "Optimaize Your Mobile Game Performance" を読み解く

Optimize_Your_Mobile_Game_Performance

 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 SimulationAuto 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編です。各種アセットをどう取り扱うか、という部分で細かいながらも重要な部分だと思うので、気合入れてやっていきたいと思います!