注意内部プロファイラーは非推奨で、Unity の将来のバージョンで廃止される予定です。代わりに Profiler ウィンドウ (メニュー: Window > Analysis > Profiler) を使用してください。iOS デバイスをプロファイルする方法の詳細は、iOS デバイスでのパフォーマンスデータの収集を参照してください。
Unity には、iOS 用のビルトインプロプロファイラーが含まれており、アプリケーションの実行状況を把握できます。ビルトインプロファイラーは、デバイス上で実行されているアプリケーションから 30 フレームごとにコンソールメッセージを発行しますが、これは CPU 依存か GPU 依存かの判断を支援します。アプリケーションが CPU 依存の場合は、スクリプトコードとガベージコレクションのどちらがボトルネックの原因かを判断することもできます。
以下は、ビルトインプロファイラーの出力例です。
iPhone Unity internal profiler stats
frametime> min: 32.5 max: 34.1 avg: 33.3
cpu-player> min: 2.2 max: 4.4 avg: 3.7
batches> min: 3 max: 3 avg: 3
draw calls> min: 3 max: 3 avg: 3
tris> min: 1704 max: 1704 avg: 1704
verts> min: 5088 max: 5088 avg: 5088
dynamic batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
static batching> batched draw calls: 0 batches: 0 tris: 0 verts: 0
player-detail> physx: 0.0 animation: 0.0 culling 0.0 skinning: 0.0 batching: 0.0 render: 0.0 fixed-update-count: 0 .. 0
scripting-scripts> update: 0.0 fixedUpdate: 0.0 coroutines: 0.0
scripting-memory> information not available on non-development player configuration
すべての時間はミリ秒/フレームで測定されます。直近 30 フレームの最短時間、最長時間、平均時間を確認できます。
| プロパティ | 機能 |
|---|---|
| cpu-player | アプリケーションが Unity エンジンの中でコードを実行したり、CPU でスクリプトを実行する時間を表示します。 |
| cpu-ogles-drv (Android のみ) | CPU 上での OpenGL ES ドライバーコードの実行に要する時間を表示します。ドローコール、内部レンダリングのステート変更、レンダーパイプラインの設定、処理された頂点数などのいくつかの要因が、ドライバーの統計に影響します。 |
| cpu-present (Android のみ) | OpenGL ES の presentRenderbuffer コマンド実行に要した時間。 |
| frametime | アプリケーションフレームの総時間を表します。iOS ハードウェアは 60Hz のリフレッシュレートにロックされているため、常に 16.7ms (1000ms/60Hz = 16.7ms) の倍数の時間を返します。 |
| プロパティ | 機能 |
|---|---|
| tris # | レンダリングに送信される三角形の総数を表示します。 |
| verts # | レンダリングに送信される頂点の総数。アプリケーションが静的ジオメトリのみを使用する場合は、この数値を 10000 未満に保つ必要があります。アプリケーションでスキンジオメトリのインスタンスを多数使用する場合は、この数ははるかに少なくなります。 |
| dynamic/static batching | エンジンにより自動的にバッチ処理されたドローコール、三角形、および頂点の数。この数をドローコールと三角形の総数と比較することで、シーンがバッチ処理するのに適しているか判断する材料となります。バッチ処理を改善するには、オブジェクト内でできる限りマテリアルを共有するべきです。 |
player-detail セクションには、エンジン内部の状況の詳細な内訳が表示されます。
| プロパティ | 機能 |
|---|---|
| physx | 物理エンジンの計算に要した時間を表示します。 |
| animation | ボーンアニメーションに要した時間を表示します。 |
| culling | カメラの Frustum 外のオブジェクトカリングに要した時間を表示します。 |
| skinning | スキンメッシュへのアニメーション適用に要した時間を表示します。 |
| batching | ジオメトリのバッチ処理に要した時間。動的なジオメトリのバッチ処理は静的なジオメトリのバッチ処理より、リソースの負担が顕著に高くなります。 |
| render | 表示されるオブジェクトのレンダリングに要した時間を表示します。 |
| fixed-update-count | このフレームで実行される FixedUpdate の最小数と最大数。FixedUpdate の数が大きすぎると、パフォーマンスが著しく低下します。 |
scripting-scripts セクションは、 Mono ランタイムでコードを実行するのに要した時間の詳細な内訳を提供します。
| プロパティ | 機能 |
|---|---|
| update | スクリプトのすべての Update() メソッド実行に要した総時間を表示します。 |
| fixedUpdate | スクリプトのすべての FixedUpdate() メソッド実行に要した総時間を表示します。 |
| coroutines | スクリプトのコルーチン内で要した時間を表示します。 |
scripting-memory セクションは、Mono ガベージコレクターによるメモリの管理状況に関する情報を提供します。
| プロパティ: | 機能: |
|---|---|
| allocated heap | 割り当て可能なメモリの総量。所定の割り当てに十分なメモリがヒープにない場合、ガベージコレクションがトリガーされます。これで十分なメモリが解放されない場合、割り当てられたヒープのサイズが増加します。 |
| used heap | 現在、オブジェクトが使用している allocated heap の量。この数は、新しいクラスインスタンス (構造体ではない) を作成するたびに、次のガベージコレクションまで増え続けます。 |
| max number of collections | 直近 30 フレームでのガベージコレクションが行われた回数を表示します。 |
| collection total duration | 直近 30 フレームでのガベージコレクションの総時間 (ミリ秒単位) を表示します。 |
iOS では、内部プロファイラーがデフォルトで無効になっています。有効にするには、以下のいずれかのプロセスを使用します。
Xcode プロジェクトから内部プロファイラーを有効にするには、以下の手順に従います。
InternalProfiler.h ファイルを選択します。#define ENABLE_INTERNAL_PROFILER 0
の行を以下のように変更します。
#define ENABLE_INTERNAL_PROFILER 1
Unity で内部プロファイラーを有効にするには、以下の手順に従います。
ノート: アプリケーションをビルドするときに、Build Settings から Development Build オプションが有効になっていることを確認します。
出力コンソールを表示するには、Xcode で View > Debug Area > Activate Console を選択してプロジェクトを実行します。Unity は統計情報を 30 フレームごとにコンソールウィンドウに表示します。