CPU Usage Profiler (CPU使用率プロファイラー) はゲームのどの部分で時間が使用されているかを表示します。選択すると、下方のペインは選択されたフレームの階層的なタイムデータを表示します。詳細は プロファイラーウィンドウ を参照してください。
グラフのラベルを上下にドラッグして CPU グラフの重なり順を変えることができます。
下方のペインの項目を選択すると、その CPU のグラフに関係しているものはハイライトされます (残りは薄く表示されます)。選択解除するには項目を再度クリックします。
階層的に表示されているタイムデータで、Self の行は、特定の関数にかかった時間の量が表示されています。これにサブ関数の呼び出しに要した時間は含まれません。上のスクリーンショットの例では、時間の41.1%は Camera.Render
関数に消費されています。この関数は多くの作業をこなしており、さまざまな描画とカリングの関数を呼び出しています。しかし実際には、これらの関数を除けば、Camera.Render
関数自身に使用したのは消費時間のうち2.1% にしかすぎません。
Time ms と Self ms の列には、同じ情報がミリ秒で表示されます。 Camera.Render
には 0.01ミリ秒かかりますが、呼び出すすべての関数を含めると 0.21ミリ秒を消費します。GC Alloc 列には、現在のフレームに割り当てられているメモリの量が表示されます。このメモリは、あとでガベージコレクタによって収集されます。ガベージコレクタがフレームレートに不具合を引き起こさないようにするには、この値をゼロに維持するようにします。
CPUプロファイラーの Others セクションには、レンダリング、スクリプト、物理、ガベージコレクション、VSync に該当しないすべての領域の合計が記録されます。これには、アニメーション、AI、オーディオ、パーティクル、ネットワーク、読み込み、PlayerLoop が含まれます。
以下は、さまざまな高レベルの Physics プロファイラーのマーカーの意味を簡単に説明しています。
FixedUpdate
から呼び出されます。この関数が物理シミュレートを行う PhysX に指示を出すことによって物理の現状を更新します。FixedUpdate
から呼び出されます。布の物理演算以外はすべてここで処理されます。このマーカーを開くと PhysX 内部で実行されている作業の低レベルの詳細が表示されます。FixedUpdate
から呼び出されます。布の物理演算以外はすべてここで処理されます。このマーカーを開くと PhysX 内部で実行されている作業の低レベルの詳細が表示されます。FixedUpdate
から呼び出されます。ここに、物理エンジンから収集された物理シミュレーションの結果が保存されます。FixedUpdate
から呼び出されます。この関数はすべての物理的な物体の位置と回転を更新させます。更新指令の送信元も同様に更新します。FixedUpdate
から呼び出されます。このステージは物理の FixedUpdate
によって最終的な状態が決定するたびに1度実行され、シミュレーション結果に応じてさまざまなステージが処理されます。接触、結合の解除やトリガーはこちらから送信されるメッセージで更新されます。これには独自な4つのステージがあります。
FixedUpdate
から呼び出されます。ここでは OnTriggerEnter
と OnTriggerExit
イベントが処理されます。FixedUpdate
から呼び出されます。ここでは OnTriggerEnter
と OnTriggerExit
イベントが処理されます。FixedUpdate
から呼び出されます。ここでは OnTriggerEnter
と OnTriggerExit
イベントが処理されます。FixedUpdate
から呼び出されます。ここではジョイントの破壊の処理に関係したことの更新、メッセージの送信を行います。Update
から呼び出されます。ここでは布や、Skinned Mesh の形成に関連したことを更新します。Update
から呼び出されます。このステージはすべての物理オブジェクトの位置や回転の補間を処理します。CPU プロファイラーが検知し、警告できる一般的な問題がいくつかあります。これらの警告は CPU Usage を見ていると、下方ペインの Warning 列に表示されます。
プロファイラーが検知し得る特別な問題には以下のようなものがあります。
上記スクリーンショットでは、プロファイラーは Static Collider.Move の警告を発しています。 Warning 列では現在のフレームで 12 回警告が発生しています。 “Delayed Cost” という用語は、プロファイラーは現時点では低いコストを示しているかもしれませんが (この場合 0.00ms です)、このアクションはよりダメージのある操作を後に引き起こす可能性があることを意味しています。
ネイティブメモリパフォーマンスプロファイリングを使用すると、Unity のネイティブメモリ管理システム内のアクティビティをプロファイルし、ランタイムパフォーマンスにどのように影響するかを評価できます。 これは、Unityのメモリ管理で不要な、または、リソースに負荷のかかる割り当てパターンを検索する場合に便利です。
Unity のネイティブメモリ管理をプロファイルするには、それを記録する必要があります。ネイティブメモリ記録モード (Unityでは Mem Record と呼ばれます) にアクセスするには、 Window > Profiler の順にプロファイラーウィンドウを開きます。 CPU Usage プロファイラーを選択し (表示されていない場合は、 Add Profiler > CPU の順にクリックします)、次に Profiler の下のドロップダウンメニューをクリックします。 次に、 Timeline__をクリックし、Mem Record__ を選択します。
オプション | 機能 | パフォーマンスに与える影響 |
---|---|---|
None | モードが無効です。デフォルトではこの設定になっています。 | 該当なし |
Sample only | メモリアロケーション、再アロケーション、メモリアロケーション解除、アクティビティの種類、システムをレコードします。 | 低 |
Callstack (fast) | これは Sample only と同じ働きをしますが、ネイティブアロケーションサイトからの短縮されたコールスタックも記録します (そのネイティブアロケーションサイトに、コールバックはネイティブからスクリプトシンボルへと変化します)。事実上、コールスタックは最も深いスクリプトシンボルまでしか見ることができません。 | 中 |
Callstack (full) | Sample only と同じ働きをしますが、すべてのスクリプトからネイティブ、ネイティブからスクリプトへの変化のあるコールスタックもレコードします。 | 高 |
ノート アクティブなプロファイラーがスタンドアロンプレイヤーに接続しているだけの場合、影響の少ない Sample only モードのみが適用可能です。
レコードしたメモリアロケーションのサンプルは Profiler ウィンドウに明るい赤で表示されます。
Mem Record の横にある High Detail ボタンをクリックして High Detail モードを有効にします。割り当てタイプとシステムを表示するためにサンプルを選択します。選択された割り当てサンプル用にコールスタックがレコードされた場合、関連するコールスタックシンボルも解決され、表示されます。
Mem Record 機能が役に立つさまざまな例があります。
CPU Usage プロファイラーの Timeline の High Detail 表示では、Unity の CPU Usage プロファイラーでレコードしたすべての時間サンプルに少なくとも1ピクセルの幅を与えます。
これにより、スレッド同期やメモリアロケーションなどの短命なアクティビティーを含め、フレーム内のすべてのアクティビティーの完全な概要を見ることができます。
High Detail 表示を有効にするには、 Window > Profiler を選択してProfiler ウィンドウを開きます。 CPU Usage プロファイラーを選択し (表示されていない場合は、 Add Profiler > CPU をクリック)、プロファイラーの下にあるドロップダウンメニューを選択し、Timeline と High Detail をクリックします。
以下の 2 つの画像は CPU Usage プロファイラーの Timeline の High Detail 表示と 通常の表示の違いを示しています。