ノート: 内部プロファイラーは非推奨で、Unity の将来のバージョンで廃止される予定です。代わりに Profiler ウィンドウ を使用してください (Window > Analysis > Profiler)。
Unity には iOS と Android 用のビルトインプロファイラーが含まれています。ビルトインプロファイラーは 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 アクティビティ
プロパティー | 機能 |
---|---|
cpu-player | アプリケーションが Unity エンジンの中でコードを実行したり、CPU でスクリプトを実行する時間を表示します。 |
cpu-ogles-drv (Android only) | CPU 上での OpenGL ES ドライバーコードの実行に要する時間を表示します。ドローコール、内部レンダリングのステート変更、レンダリングパイプラインの設定、処理された頂点数などのいくつかの要因が、ドライバーの統計に影響します。 |
cpu-present (Android only) | 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 の数が大きすぎるとパフォーマンスが著しく劣化します。fixed time delta についてよい値を設定するためにいくつかシンプルなガイドラインが ここに あります。 |
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 ではデフォルトでは、内部プロファイラーがデフォルトで無効となっています。それを有効にするためには Unity により生成された XCode プロジェクトを開いて、InternalProfiler.h
ファイルを選択し、以下のように変更します。
#define ENABLE_INTERNAL_PROFILER 0
の行を以下のように変更します。
#define ENABLE_INTERNAL_PROFILER 1
または、iOS Player Settings (Edit > Project Settings > Player Settings, then select iOS) にアクセスします。Debugging and crash reports セクションで、Enable Internal Profiler (Deprecated) 設定を有効にします。アプリケーションをビルドするときに、Build Settings で Development Build が有効になっていることを確認します。
出力コンソール (GDB) を表示するには、XCode のメインメニューで View > Debug Area > Activate Console を選択して、次にプロジェクトを実行します。Unity は統計情報を 30 フレームごとにコンソールウィンドウに表示します。
Android で内部プロファイラーを有効にするには、Android の Player Settings (Edit > Project Settings > Player Settings に移動し Android を選択) にアクセスします。Optimization セクションで、Enable Internal Profiler (Deprecated) 設定を有効にします。デバイスでアプリケーションを実行する場合は、統計は logcat に送信されます。logcat を表示するには、__ adb__ または Android Debug Bridge がインストールされていることを確認してから、シェルコマンド adblogcat
を実行します。