プロファイラーウィンドウ
レンダリングエリア

CPU 使用率エリア

CPU 使用率エリアはゲームで使用された時間を表示します。選択したとき、下側のパネルは選択されたフレームの階層データを表示します。詳細はプロファイラーウィンドウを参照してください。

  • Hierarchy モード: 階層的に時間データを表示します。
  • Group Hierarchy モード: データを論理グループ (Rendering、Physics、Scripts その他) に分けます。グループ内のあらゆる項目が別のグループに存在できるため (例えばスクリプトがレンダリングを呼ぶ、等)、グループの時間は 100%を超えることがしばしばあります (バグではありません)。

CPU チャートの縦の並び順はチャートラベルを上下にドラッグするだけで並び替えできます。

各項目の選択

下部区画の項目を選択した時、その CPU チャートに関係しているものはハイライトされます(残りは薄く表示されます)。選択解除するには項目を再度クリックしてください。

Render.OpaqueGeometry が選択されており、関係するものがチャートでハイライトされている
Render.OpaqueGeometry が選択されており、関係するものがチャートでハイライトされている

階層的に表示されているタイムデータには、特定の関数呼び出しにかかった時間の総量が表示されています。これにサブ関数の呼び出しに要した時間は含まれません。上記スクリーンショットの例では、時間の41.1%は Camera.Render 関数に消費されています。この関数は多くの作業をこなしており、さまざまな描画とカリングの関数を呼び出しています。しかし実際には、Camera.Render 関数ではこれらの関数を除けば、消費時間のうち2.1%しかかかっていません。 Time ms と Self ms 列は同様の情報を表示していますが、表示方法をミリ秒としています。 Camera.Render には0.01ミリ秒かかっていますが、そこから呼び出される関数すべてを含めば0.21秒かかります。 GC Alloc の行は現在のフレームにおけるメモリの割り当て量を表しています。これは後からガベージコレクターによって回収されます。この値をゼロにし続けるようにコードを構成することによって、フレームレートを突発的に下げる要因となるガベージコレクターを避けることができます。

CPU プロファイラーの Others は Renderer、Scripts、Physics、ガベージコレクタまたは VSync に分類されていないすべての領域の合計を記録しています。この中にはアニメーション、AI、オーディオ、パーティクル、ネットワーキング、ローディング、PlayerLoop が含まれています。

物理マーカー

以下では、多様な高レベル物理プロファイラーマーカーの意味についてそれぞれ説明していきます:

  • Physics.Simulate: FixedUpdate から呼び出されます。この関数が物理シミュレートを行う PhysX に指示を出すことによって物理の現状を更新します。
  • Physics.Processing: FixedUpdate から呼び出されます。布の物理演算以外はすべてここで処理されます。このマーカーを開くと PhysX 内部で実行されているローレベル作業の詳細が表示されます。
  • Physics.ProcessingCloth: FixedUpdate から呼び出されます。この関数では布に関する物理演算のすべてが処理されます。このマーカーを開くと PhysX 内部で実行されているローレベル作業の詳細が表示されます。
  • Physics.FetchResults: FixedUpdate から呼び出されます。この関数では物理シミュレーションの結果が PhysX によって反映されます。
  • Physics.UpdateBodies: FixedUpdate から呼び出されます。この関数はすべての物理的な物体の位置と回転を更新させます。更新指令の送信元も同様に更新します。
  • Physics.ProcessReports: FixedUpdate から呼び出されます。このステージは物理の FixedUpdate によって最終的な状態が決定するたびに1度実行され、シミュレーション結果に応じてさまざまなステージが処理されます。接触、結合の解除やトリガーはこちらから送信されるメッセージで更新されます。これには独自な4つのステージがあります:
    • Physics.TriggerEnterExits: FixedUpdate から呼び出されます。ここでは OnTriggerEnter と OnTriggerExit イベントが処理されます。
    • Physics.TriggerStays: FixedUpdate から呼び出されます。ここでは OnTriggerStay イベントが処理されます。
    • Physics.Contacts: FixedUpdate から呼び出されます。ここでは OnCollisionEnter, OnCollisionExit と OnCollisionStay イベントが処理されます。
    • Physics.JointBreaks: FixedUpdate から呼び出されます。ここではジョイントの破壊の処理に関係したことの更新、メッセージの送信を行います。
  • Physics.UpdateCloth: Update から呼び出されます。ここでは布や、Skinned Mesh の形成に関連したことを更新します。
  • Physics.Interpolation: Update から呼び出されます。このステージはすべての物理オブジェクトの位置や回転の補間を処理します。

パフォーマンスに関する警告

プロファイラーが検知し、警告可能な一般的な問題がいくつかあります。これらの警告は CPU の使用方法を見ている時、下部区画の警告マーク列に表示されます。

静的コライダーが移動されていることを示す警告を表示しているプロファイラー
静的コライダーが移動されていることを示す警告を表示しているプロファイラー

プロファイラーが検知し得る特別な問題には以下のようなものがあります。

  • Static Collider.Modify (高価で遅延の原因)
  • Static Collider.Move (高価で遅延の原因)
  • Static Collider.Create (高価で遅延の原因)
  • Animation.DestroyAnimationClip [RebuildInternalState を引き起こします]
  • Animation.AddClip [RebuildInternalState を引き起こします]
  • Animation.RemoveClip [RebuildInternalState を引き起こします]
  • Animation.Clone [RebuildInternalState を引き起こします]
  • Animation.Deactivate [RebuildInternalState を引き起こします]

上記スクリーンショットでは、プロファイラーは Static Collider.Move の警告を発しています。警告マークの列では現在のフレームで 12 個の要素でエラーの発生が示されています。 “Delayed Cost” という用語の意味は、プロファイラーは現時点では低いコストを示しているかもしれませんが(この場合 0.00ms です)、このアクションは後々高価な操作になる可能性があるということです。

プロファイラーウィンドウ
レンダリングエリア