Version: 2019.3
プロファイラー概要
アプリケーションのプロファイリング

Getting started with the Profiler window

Unity Profiler (プロファイラー) にアクセスするには、Window > Analysis > Profiler に移動するか、キーボードショートカット Ctrl+7 (macOS では Command+7 ) を使用します。

プロファイラーは、アプリケーションパフォーマンスの複数の領域を記録し、その情報を表示します。この情報を使用して、アプリケーションで何を最適化する必要があるかについて十分な情報に基づいた決定を行い、最適化によって期待する結果が得られることを確認できます。

By default, the Profiler records and keeps the last 300 frames of your game, and shows you detailed information about every frame. You can increase the number of frames it records in the Preferences window (menu: File > Preferences), up to 2,000 frames.

スクリプトコードと、そのコードをスローダウンさせる可能性のある特定のアセットとリソースをアプリケーションがどのように使用するかを調べることができます。また、さまざまなデバイスでアプリケーションのパフォーマンスを比較することもできます。プロファイラーにはいくつかの異なる プロファイラーモジュール があり、プロファイリングセッションに追加して、レンダリング、メモリ、 オーディオなどの領域に関する詳細情報を取得できます。

このページでは、以下のトピックについて説明します。

Profiler window layout

Profiler ウィンドウは以下のようにレイアウトされています。

  • A: プロファイラーモジュール。これは、アプリケーションでプロファイリングできるすべてのモジュールのリストです。ウィンドウのモジュールを追加したり削除したりするには、このエリアの上部にあるドロップダウンメニューを使用します。
  • B: プロファイラーコントロール。これらのコントロールを使用して、プロファイリングするデバイスと Unity が実行するプロファイリングの種類を設定し、フレーム間を移動し、データの記録を開始します。
  • C: フレームチャート。このエリアには、各モジュールのチャートが含まれています。プロファイラーを初めて開くとこのエリアは空白で、アプリケーションのプロファイリングを開始すると情報が表示されます。
  • D: モジュール詳細パネル。ウィンドウのこのエリアの情報は、選択したモジュールに基づいて変化します。例えば、CPU Usage プロファイラーモジュールを選択すると、詳細な Timeline (タイムライン) と Hierarchy (階層) ビューに切り替えるオプションがあります。Rendering プロファイラーモジュールを選択すると、このエリアにデバッグ情報のリストが表示されます。プロファイラーを初めて開いたときはこのエリアは空白で、アプリケーションのプロファイリングを開始すると情報が表示されます。

Profiler controls

プロファイラーのコントロールは、Profiler ウィンドウ上部のツールバーにあります。これらを使用して、 プロファイラーデータのレコーディングを開始または停止し、プロファイリングされたフレームをナビゲートします。

コントロール 機能
プロファイリングターゲット アプリケーションをプロファイルするターゲットを選択します。 デフォルトでは Playmode に設定されています。 Editor を選択して Unity エディターをプロファイリングし、エディターが現在使用しているリソースをディスプレイ表示することもできます。

Unity は、ネットワーク上で実行しているデバイスや USB 経由で接続されているデバイスも自動的に検出し、ドロップダウンに表示します。ドロップダウンの Enter IP をクリックして、アプリケーションをプロファイリングしたいデバイスの IP アドレスを手動で入力します。詳細は、アプリケーションのプロファイリング を参照してください。
レコーディング これをクリックすると、アプリケーションの実行時にアクティブなモジュールのプロファイリング情報が記録されます。このボタンを有効にしないと、アプリケーションを実行してもプロファイラーはデータを収集しません。
戻る 1 フレーム前に戻ります。
進む 1 フレーム先に進みます。
Current Jump to the last recorded frame and make the Profiler display data collected in real time.
フレーム番号 現在プロファイラーで表示しているフレームの番号を示します。
Clear Profiler ウィンドウからすべてのデータを消去します。
Clear on Play これを有効にすると、次に Player ウィンドウで再生ボタンをクリックしたとき、または新しいターゲット デバイスに接続したときに、Profiler ウィンドウからすべてのデータが消去されます。
Deep Profile すべての C# メソッドをプロファイリングするには、この設定を有効にします。この設定を有効にすると、Unity はすべての mono 呼び出しにインストルメンテーションを加えます。これにより、スクリプトのより詳細な調査が可能になります。詳細は ディーププロファイリング を参照してください。
Call Stacks スクリプティングのメモリ割り当てのコールスタックを記録するには、このトグルボタンをクリックします。このオプションを有効にするとプロファイラーが記録するフレームは、フルコールスタックの GC.Alloc サンプルの情報を取得します。それは、Deep Profile がアクティブでない場合でも、マネージスクリプティングアロケーションを行います。詳細については、CPU Usage プロファイラーモジュールページの コールスタックの割り当て を参照してください。
ロード 保存したプロファイラーデータを Profiler ウィンドウにロードします。プレイヤーが Profiler.logFile API を通してファイルに書き出したバイナリプロファイルデータをロードすることもできます。

Shift ボタンを押しながら Load ボタンをクリックすると、ファイルのコンテンツを現在のプロファイルフレームに追加できます。
保存 プロファイラーデータを Project フォルダーの .data ファイルに保存します。
コンテキストメニュー
Color Blind Mode この設定を有効にすると、プロファイラーのグラフでコントラストの高い色が使用されます。これは、赤緑色覚異常 (例えば、先天赤緑異常、1 型 2 色覚異常、3 型 2 色覚異常) のユーザーのための可視性を向上させます。
Preferences Preferences メニューを開くと、プロファイラー固有のプロパティーを調整できます。

オーバーヘッドを低く維持するために、Unity はエディター UI の 5 フレームごとに再描画します。これにより、少しぎこちない更新になります。

詳細プロファイリング

通常、プロファイラーは、ProfilerMarkers に明示的に包まれているコード部分をプロファイリングします。これには、エンジンのネイティブ コードからスクリプトコードへの呼び出し (例えば、MonoBehaviourStartUpdate、または類似のメソッドなど) の最初のコールスタックの深さが含まれます。

独自のコードにさらに明示的な ProfilerMarker インストルメンテーションを加えなくても、スクリプトコードの子サンプルとして表示できる他のサンプルは、その API がインストルメント化されている場合に、Unity の API にコールバックできるサンプルのみです。パフォーマンスのオーバーヘッドを伴うほとんどの API 呼び出しはインストルメント化されています。例えば、Camera.main API を通してメインカメラにアクセスすると、FindMainCamera サンプルとして記録されます。

Deep Profile 設定を有効にすると、プロファイラーはスクリプトコードのすべての部分をプロファイリングし、少なくとも最初のコールスタックの深さを含むすべての関数呼び出しを Unity API に記録します。これは、コードがアプリケーションのパフォーマンスに影響を与える箇所を改善するのに役立つ情報ですが、オーバーヘッドが増加します。

アプリケーションにディーププロファイリングを行うと、Unity はすべてのスクリプトメソッドにプロファイラーのインストルメンテーションを挿入し、すべての関数呼び出しをレコードします。これは、アプリケーションコードが最も時間を費やす場所を理解するのに役立ちます。

ディーププロファイリングはリソースを大量に消費し、多くのメモリを使用します。結果として、プロファイリング中はアプリケーションの実行が著しく遅くなります。ディーププロファイリングは、簡単なスクリプトで動く小さなゲームに適しています。複雑なスクリプトコードを使用している場合、アプリケーションでディーププロファイリングをまったく使用できない場合があります。また、大きなアプリケーションの多くでは、ディーププロファイリングによって Unity のメモリが不足する場合があります。

プロファイラーにサンプルを流すためのリングバッファに保存するには、サンプルが多すぎるという問題が発生した場合、Unity はエラーメッセージを表示します。リングバッファのサイズを増やすには、プロファイリングするプレイヤーの Profiler.maxUsedMemory プロパティーを調整します。

ディーププロファイリングによってアプリケーションのフレームレートが大幅に低下し、実行が不可能にな場合は、スクリプトコードのブロックを手動でプロファイリングできます。これにより、ディーププロファイリングよりオーバーヘッドが小さくなります。ProfilerMarkers を使用して、スクリプトブロックをマークアップするために必要なインストルメンテーションを手動で加えます。これらは CPU Usage プロファイラーモジュール に表示されます。

ディーププロファイリングなしで GC.Alloc サンプルを発生させるコールスタックを見つけるには、アロケーションコールスタック のコレクションを有効にします。プロファイラーコントロールの Call Stacks 設定を有効にすると、タイムラインビューで GC.Alloc サンプルを選択するか、Hierarchy ビューの Show Related Objects パネルを使用してこれらのサンプルのコールスタックを見つけることができます。詳細については、CPU プロファイラーモジュール のアロケーションコールスタックのドキュメントを参照してください。

Profiler modules

Profiler ウィンドウの上部は、ゲームの特定の領域をプロファイリングする Profiler Modules (プロファイラーモジュール) に分かれています。アプリケーションをプロファイリングすると、Unity は各モジュールに関連するデータを対応するチャートに表示します。

CPU Usage モジュールは、 アプリケーションが各フレームに費やす時間に関する最適な概要を提供します。他のモジュールはより具体的なデータを収集し、より具体的な領域を調べたり、メモリ消費、レンダリング、 オーディオ統計など、 アプリケーションの重要な要素を監視するのに役立ちます。

各モジュールには独自のチャートがあります。任意のモジュールを選択すると、モジュール詳細パネルがウィンドウの下方に表示されます。これを使ってモジュールが収集した詳細なデータを検査できます。

Profiler Modules 機能
CPU Usage 物理演算、スクリプト、アニメーション、ガベージコレクションなど、アプリケーションが最も時間を費やすエリアの概要を表示します。このモジュールには、アプリケーションに関する幅広いプロファイリング情報が含まれています。このモジュールを使用して、 アプリケーションのより具体的な問題を調査するために使用するモジュールを決定できます。このモジュールは、たとえ閉じても常にアクティブです。CPU Usage プロファイラーモジュール を参照してください。
GPU Usage グラフィックス処理に関する情報を表示します。オーバーヘッドが高いため、デフォルトではこのモジュールはアクティブではありません。GPU Usage プロファイラーモジュール を参照してください。
Rendering Unity がアプリケーションでグラフィックスをどのようにレンダリングするかに関する情報を表示します。静的および動的バッチ処理、SetPass と Draw の呼び出し、三角形、頂点などの情報が含まれます。Rendering プロファイラーモジュール を参照してください。
Memory Unity がアプリケーションでメモリをどのように割り当てるかに関する情報を表示します。これは、スクリプティングアロケーション (GC.Alloc) がどのようにガベージコレクションにつながるのか、またはアプリケーションのアセットメモリ使用量の経時的変化を確認するのに特に役立ちます。Memory プロファイラーモジュール を参照してください。
Audio Displays information related to the audio in your application, such as when and how many audio sources play, how much CPU usage the Audio system requires, and how much memory Unity allocates to it. See Audio profiler module.
Video Displays information related to video in your application.
Physics 物理演算エンジンが処理したアプリケーションの物理演算に関する情報を表示します。Physics プロファイラーモジュール を参照してください。
Physics (2D) Physics プロファイラーに似ていて、このモジュールは、物理演算エンジンが処理したアプリケーションの 2D 物理演算に関する情報を表示します。
Network Messages(deprecated) マルチプレイヤー高レベル API によって送受信される低レベルのパケットとメッセージに関する情報を表示します。
ノート: マルチプレイヤー高レベル API は非推奨です。
Network Operations (deprecated) マルチプレイヤー高レベル API によって送受信される低レベルのパケット (SyncVar やコマンドの送信数など) とメッセージに関する情報を表示します。
ノート: マルチプレイヤー高レベル API は非推奨です。
UI Unity がアプリケーションの UI バッチをどのように処理するか (Unity がアイテムをバッチする理由や方法などを含む) に関する情報を表示します。UI プロファイラーモジュール を参照してください。
UI Details UI モジュールと似ており、このモジュールのチャートにはバッチと頂点の数に関するデータと、UI の変更をトリガーするユーザー入力イベントに関する情報を含むマーカーが含まれます。
Global Illumination Unity がアプリケーションのグローバルイルミネーション (GI) ライティングサブシステムに費やす CPU リソースに関する情報を表示します。Global Illumination Profiler ウィンドウ を参照してください。

Profiler module overhead

GPU、UI、Audio Profiler モジュールなどの一部の Profiler モジュールでは、大きなデータ収集オーバーヘッドがあります。これらのモジュールがアプリケーションのパフォーマンスに影響を与えないようにするには、Profiler Module ドロップダウンで選択を解除して非アクティブにします。これにより、ウィンドウからモジュールが削除され、プロファイラーによるモジュールのデータ収集が停止され、プロファイラーのオーバーヘッドが減少します。

アクティブでないときでも常にデータを収集する CPU Usage モジュールには適用されません。なぜなら、他のモジュールが依存しているためです。

モジュールを追加するには、Profiler Module ドロップダウンを選択し、アクティブにしたいプロファイラーを選択します。ドロップダウンからプロファイラーモジュールを選択すると、データの収集を開始しますが、アクティブでなかった期間のデータは表示されません。

GPU プロファイラーモジュールのオーバーヘッドを避けるために、デフォルトではアクティブではありません。GPU プロファイラーモジュールは、グラフィックスドライバーにフックするために、アプリケーションの開始時にアクティブでなければなりません。後で追加すると、ほとんどのプラットフォームでは効果がなく、プロファイラーに “GPU profiling is not supported by the graphics card driver (or it was disabled because of driver bugs)” (GPU プロファイリングはグラフィックスカードドライバーでサポートされていません。または、ドライバーのバグのため無効でした) というメッセージが表示されます。

Profiler ウィンドウを使わずに Profiler.logFile API を使用してデータを収集しディスクに送信するようにプロファイラーに指示する場合は、 Profiler.SetAreaEnabled() を使用してプロファイラーモジュールをオフにすることができます 。

外部 IDE を通してスクリプトをデバッグする設定の中には、オーバーヘッドが発生するものもあります。このオーバーヘッドを避け、より正確な測定値を得るには、Editor Attaching 設定を無効にします (Preferences > External Tools)。同様に、ビルドプレイヤーをプロファイリングするときは、 Build Settings を開き、 Script Debugging を無効にしてオーバーヘッドを回避します。

Profiler frame charts

Profiler ウィンドウの上部には、経時的なパフォーマンスデータがフレームごとに表示されます。アプリケーションを実行すると、プロファイラーは各フレームのデータを記録します。デフォルトでは、Profiler ウィンドウにはプロファイリングされた最後の 300 フレームの履歴が表示されます。Preferences ウィンドウでプロファイリングするフレーム数を最大 2,000 まで増やすことができます。

Profiler ウィンドウのプロファイラーフレームチャートエリアをクリックすると、白い線が表示され、アプリケーションのフレームの 1 つが強調表示されます。フレーム間を移動するには、Profiler ウィンドウのツールバーの 移動コントロール を使用します。

Unity はチャートの垂直方向のスケールを自動的に管理し、チャートはウィンドウの垂直方向のスペースを埋めようとします。チャートの詳細を表示するには、他のプロファイラーモジュールを削除するか、チャートと詳細統計エリアの間の境界線をドラッグして、チャートの画面領域を増やします。

チャートで指標の表示と非表示を切り替えるには、モジュールのラベルの横にある色付きの正方形をクリックします。これは、スパイクの原因を特定するのに役立ちます。CPU Usage プロファイラーのチャートなどの積み上げチャートでは、指標ラベルを並べ替えて、積み上げ順序を変更できます。これにより、ノイズの多い指標をより見やすくすることで、チャートをより明白にすることができます。

各プロファイラーモジュールは、異なるパフォーマンスデータの指標を収集し、別々のチャートに表示します。フレームをクリックすると、Unity は Profiler ウィンドウの下半分のモジュール詳細パネルにフレームの詳細を表示します。このウィンドウの詳細のタイプは、選択するプロファイラーモジュールによって異なります。各モジュールがこのエリアに表示する特定の詳細については、プロファイラーモジュール の個々のドキュメントを参照してください。

Command line arguments

ビルドしたプレイヤーや Unity エディターをコマンドライン (Windows のコマンドプロンプト、macOS のターミナル、Linux シェル、Android の adb など) から起動する場合は、コマンドライン引数を渡してプロファイラーの設定を行うことができます。

コマンドライン引数 説明
-deepprofiling ビルドしたプレイヤーでディーププロファイリングを有効にします。
-profiler-enable プレイヤーやエディターの起動をプロファイリングします。プレイヤーでこの引数を使用すると、Build Settings で Autoconnect Profiler オプションを有効にしてプレイヤーをビルドするのと同じ効果があります。

エディターでこの引数を使用すると、エディターの起動時に Profiler ウィンドウでプロファイラー情報の収集と表示を開始します。
-profiler-log-file <Path/To/Log/File.raw> この引数は、プロファイルデータを .raw ファイルに送信するようにプロファイラーを設定します。プレイヤーとエディターの両方で使用できます。
-profiler-capture-frame-count <NumberOfFrames> この引数は、起動時に .raw ファイルに送信する場合に、プロファイルでキャプチャするフレーム数を設定します。プレイヤーでのみ機能します。
-profiler-maxusedmemory デフォルトでは、maxUsedMemory はプレイヤー用に 16MB、エディター用に 256MB です。この引数を使用して、起動時に maxUsedMemory パラメーターをカスタムサイズに設定できます (例えば、-profiler-maxusedmemory 16777216)。サイズはバイト単位で設定します。
プロファイラー概要
アプリケーションのプロファイリング