iOS でのパフォーマンスを最適化
ビルトインプロファイラーによるパフォーマンスの測定

iOS 固有の最適化

このページでは、iOS デプロイメント特有の最適化の詳細について説明します。

スクリプトコールの最適化

UnityEngine 名前空間にあるほとんどの関数は C/C++ で実装されています。Mono スクリプトから C/C++ 関数を呼び出すと、パフォーマンスのオーバーヘッドが発生します。そのため、iOS Script Call Optimization の設定を使用して、1 フレームあたり約 1 - 4 ミリ秒節約できます。

iOS では、(内部的な、または、try/catch ブロックを使用した) 例外処理に決して依存しないことが良い開発方法といえます。デフォルトの Slow and Safe オプションを使用すると、Unity はデバイス上で発生するすべての例外をキャッチし、スタックトレースを提供します。 Fast but no Exceptions オプションを使用しない場合、発生した例外はすべてゲームをクラッシュさせ、スタックトレースは提供されません。さらに Unity は AppDomain.UnhandledException イベントを送信し、プロジェクト特有のコードが例外情報にアクセスできるようにします。

Mono スクリプティングバックエンドを使用すると、プロセッサーが例外処理しないため、ゲームはより高速で実行されます。IL2CPP スクリプティングバックエンドを使用する場合、Fast but no Exceptions オプションにはパフォーマンス上の利点はありません。ただし、ゲームを世界にリリースするときは、Fast but no Exceptions オプション付きで公開することを推奨します。

加速度センサーの処理周波数の調整

加速度センサーの入力があまりに頻繁に処理されると、結果としてゲームの全体的なパフォーマンスが低下する可能性があります。デフォルトでは、Unity iOS アプリケーションは毎秒 60 回加速度センサーをサンプリングします。加速度センサーのサンプリングの周波数を下げることで、パフォーマンス上のメリットが得られる場合があります。また、加速度センサーの入力を使用しないゲームでは 0 に設定することもできます。 iOS プラットフォームの Player 設定Other SettingsAccelerometer Frequency の設定を変更できます。

インクリメンタルビルド

IL2CPP スクリプティングバックエンドで生成された C++ コードは、ソースファイルが変更された部分だけ C++ ビルドシステムがコンパイルして更新することができます。これは IL2CPP スクリプティングバックエンドで無駄なビルド時間を省くことができます。

インクリメンタルビルドを使用するには、Build Settings ダイアログから Build を選択してから Append オプションを選択します。 Replace オプションはクリーンビルドを実行します。

フレームレートの設定

Unity iOS ではアプリケーションがレンダリングループを実行する頻度を変更することが可能です。デフォルトでは 30 フレーム毎秒です。バッテリー消費を節約するためにこの数字を下げることはできますが、この節約はフレーム更新が犠牲になります。反対にフレームレートを増やすと、タッチ入力や加速度センサー処理といった、他の処理よりもレンダリングの優先度をあげることができます。フレームレートがどのようにゲームプレイへ影響するかを判断するには、フレームレートを変えて実験してみる必要があります。

もしアプリケーションが重たい計算処理やレンダリングを伴っており、例えば 15 フレーム毎秒しか維持できない場合、希望のフレームレートを 15 以上に設定したからといってパフォーマンスは上がりません。より高いフレームレートを得るためには、アプリケーションを十分に最適化する必要があります。

フレームレートを設定するには、Application.targetFrameRate を変更します。


iOS でのパフォーマンスを最適化
ビルトインプロファイラーによるパフォーマンスの測定