Physics 2D Profiler モジュールは、プロジェクトのシーン内で物理演算システムによって処理された物理演算に関する情報を表示します。この情報は、プロジェクトのシーンにおける、物理演算に関連したパフォーマンス問題や予期せぬ矛盾の診断と解決に役立てることができます。
Profiler ウィンドウ 内の Physics 2D Profiler モジュール
Physics 2D Profiler モジュールのチャートは、プロジェクトのシーンで物理演算システムが処理する物理演算に関連した様々な統計情報を、以下のチャートカテゴリ別にトラッキングします。フレームチャートのウィンドウをクリックするか、チャートグラフ内のキャプチャされたフレームを選択すると、選択したカテゴリをトラッキングできます。チャート内のカテゴリの順序を変更するには、チャートの凡例内でカテゴリをドラッグアンドドロップします。カテゴリの色の付いた凡例をクリックして、表示を切り替えることもできます。選択した統計に関するより詳細な情報は、モジュールの詳細ペイン で参照できます。
Chart | 説明 |
---|---|
Total Contacts | このフレーム内に存在した接触の総数です。これには Collision (衝突) 接触と Trigger (トリガー) 接触の両方が含まれます。接触の処理と解決には時間がかかる場合があるため、最小限に抑える必要があります。 |
Total Shapes | このフレーム内に存在した 物理形状 の総数です。Collider2D によって、生成する物理形状の数が異なります (最小で 1、最大で無限)。形状カウント を取得して 物理形状を取得 することで、どの Collider2D に関してもこの数を特定できます。 |
Total Queries | このフレームで呼び出されたクエリの総数です。これには Physics2D.Raycast や Physics2D.OverlapPoint などのクエリが含まれます。 |
Total Callbacks | このフレームで呼び出された、OnCollisionEnter2D、OnCollisionStay2D、OnCollisionExit2D、OnTriggerEnter2D、OnTriggerStay2D、および OnTriggerExit2D コールバックの総数です。 |
Total Joints | このフレームに存在した Joint2D の総数です。 |
Total Bodies | このフレームに存在した Rigidbody2D の総数です。 |
Awake Bodies | Awake (スリープ していない状態、“起きている” 状態) で、かつこのフレームに存在した、Rigidbody2D の総数です。 |
Dynamic Bodies | このフレームに存在した、Dynamic (動的) ボディタイプの Rigidbody2D の総数です。Dynamic (動的) ボディは全てのボディタイプの中で最も処理に時間がかかるため、数を最小限に抑える必要があります。 |
Continuous Bodies | このフレームに存在した、Continuous (連続的) 衝突判定モードの Rigidbody2D の総数です。Continuous (連続的) 衝突判定モードを使用したボディは、Discrete (非連続的) 衝突判定モードを使用した場合よりもはるかにコストがかかるため、最小限に抑える必要があります |
Physics Used Memory | 2D 物理演算システムのみによって使用された永続メモリの総量です。これには、コアエンジンと各物理コンポーネントの使用メモリが両方含まれますが、このフレーム内で使用された一時メモリは含まれません。 |
Physics 2D Profiler モジュールでフレームを選択すると、プロジェクトのシーンの物理演算に関する詳細情報が、詳細ペインに表示されます。詳細ペインはカテゴリ別にソートされ、各カテゴリがそれぞれ 1 つの行に表示されます。
以下の参照表には、利用可能な統計情報の説明と、対応の Profiler Counter (プロファイラーカウンター)、および、リリースビルドで使用可能かどうかの情報が掲載されています。プロファイラーカウンターは、エディタービルドと開発ビルドで常に利用可能です。この情報は、ProfilerRecorder API や Profiler Module Editor でもアクセス可能なので、カスタムProfiler モジュールに追加することができます。
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | 2D 物理演算システムのみによって使用された永続メモリの総量です。これには、コアエンジンと各物理演算コンポーネントの使用メモリが両方含まれますが、このフレームで使用された一時メモリは含まれません。 | Physics Used Memory 2D | 不可 |
Relative | Unity の全体のメモリ使用量と比較した、2D 物理演算システムのメモリ使用量の相対的な割合です。 | 該当なし | 該当なし |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | このフレームに存在した Rigidbody2D の総数です。 | Total Bodies | 不可 |
Awake | Awake (スリープ していない状態、“起きている” 状態) で、かつこのフレーム内に存在した、Rigidbody2D の数です。Static (静的) ボディタイプの Rigidbody2D は常にスリープ状態です。 | Awake Bodies | 不可 |
Asleep | スリープ状態 (Awake でない状態) で、かつこのフレーム内に存在した、Rigidbody2D の数です。Static (静的) ボディタイプの Rigidbody2D は常にスリープ状態です。 | Asleep Bodies | 不可 |
Dynamic | このフレームに存在した Dynamic (動的) ボディタイプの Rigidbody2D の数です。Dynamic ボディは全てのボディタイプの中で最も処理に時間がかかるため、数を最小限に抑える必要があります。 | Dynamic Bodies | 不可 |
Kinematic | このフレームに存在した Kinematic (キネマティック) ボディタイプの Rigidbody2D の数です。Kinematic ボディの処理は最小限なので、“明示的な動きは必要だが外力への反応は必要ない” 場合には、これを使用してください。 | Kinematic Bodies | 不可 |
Static | このフレームに存在した Static (静的) ボディタイプの Rigidbody2D の数です。 Static (静的) ボディは、全てのボディタイプの中で最も処理が少ないので、動きが必要ない場合は可能な限りこれを使用してください。 | Static Bodies | 不可 |
Discrete | このフレームに存在した、Discrete (非連続的) 衝突判定モードの Rigidbody2D の数です。Discrete (非連続的) 衝突判定モードを使用したボディは、Continuous (連続的) 衝突判定モードを使用した場合よりもはるかにコストが低いため、可能な限りこれを使用してください。 | Discrete Bodies | 不可 |
Continuous | このフレームに存在した、Continuous (連続的) 衝突判定モードの Rigidbody2D の数です。Continuous (連続的) 衝突判定モードを使用したボディは、Discrete (非連続的) 衝突判定モードを使用した場合よりもはるかにコストがかかるため、数を最小限に抑える必要があります。 | Continuous Bodies | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | このフレームに存在した 物理形状 の総数です。Collider2D によって生成する物理形状の数が異なります (最小で 1、最大で無限)。形状カウント を取得して 物理形状を取得 することで、どの Collider2D に関してもこの数を特定できます。 | Total Shapes | 不可 |
Awake | Awake な (スリープ状態でない、“起きている”) Rigidbody2D にアタッチされた物理形状は、Awake です。これは、Awake (スリープしていない) 状態で、かつこのフレームに存在した、物理形状の数です。 | Awake Shapes | 不可 |
Asleep | スリープ状態の Rigidbody2D にアタッチされた物理形状は、スリープ状態です。これは、スリープ状態 (Awake でない状態) で、かつこのフレームに存在した、物理形状の数です。 | Asleep Shapes | 不可 |
Dynamic | Dynamic (動的) ボディタイプの Rigidbody2D にアタッチされた物理形状は Dynamic (動的) です。これは、Dynamic (動的) でかつこのフレームに存在した物理形状の数です。 | Dynamic Shapes | 不可 |
Kinematic | Kinematic (キネマティック) ボディタイプの Rigidbody2D にアタッチされた物理形状は Dynamic (動的) です。これは、Kinematic (キネマティック) でかつこのフレームに存在した物理形状の数です。 | Kinematic Shapes | 不可 |
Static | Static (静的) ボディタイプの Rigidbody2D にアタッチされた物理形状は Dynamic (静的) です。これは、Static (静的) でかつこのフレームに存在した物理形状の数です。 | Static Shapes | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | このフレームで呼び出されたクエリの総数です。これには、Physics2D.Raycast や Physics2D.OverlapPoint などのクエリが含まれます。 | Total Queries | 不可 |
Raycast | このフレームで呼び出されたレイベースまたは線ベースのクエリの数です。これには、Physics2D.Raycast や Physics2D.Linecast などのクエリが含まれます。 | Raycast Queries | 不可 |
Shapecast | このフレームで呼び出されたシェイプスイープクエリの数です。これには、Physics2D.BoxCast、Physics2D.CircleCast、Collider2D.Cast などのクエリが含まれます。 | Shapecast Queries | 不可 |
Overlap | このフレームで呼び出された Overlap クエリの数です。これには、Physics2D.OverlapPoint、Physics2D.OverlapCircle、Collider2D.OverlapCollider などのクエリが含まれます。 | Overlap Queries | 不可 |
IsTouching | このフレームで呼び出された接触の Touching クエリの数です。これには、Physics2D.IsTouching、Collider2D.IsTouching、Rigidbody2D.IsTouching などのクエリが含まれます。 | IsTouching Queries | 不可 |
GetContacts | このフレームで呼び出された接触取得クエリの数です。Physics2D.GetContacts、Collider2D.GetContacts、Rigidbody2D.GetContacts などのクエリが含まれます。Collision2D.GetContacts は物理演算クエリではなく、ここには含まれません。 | GetContacts Queries | 不可 |
Particle | このフレームでパーティクルシステムによって呼び出されたクエリの数です。これが使用されるのは、パーティクルシステムモジュールが 2D 物理演算のコライダーと接触するように設定されていて、パーティクルシステムによって完全に制御されている場合です。この数は非常に大きくなる場合がありますが、処理効率も非常に高くなります。 | Particle Queries | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | このフレーム内に存在した接触の総数です。これには Collision (衝突) 接触と Trigger (トリガー) 接触の両方が含まれます。接触の処理と解決には時間がかかる場合があるため、最小限に抑える必要があります。 | Total Contacts | 不可 |
Added | このフレームで追加された接触の数です。これには Collision (衝突) 接触と Trigger (トリガー) 接触の両方が含まれます。1 つのフレームに接触を多く追加し過ぎるとパフォーマンス負荷が急増する可能性があるため、これは最小限に抑えてください。 | Added Contacts | 不可 |
Removed | このフレームで削除された接触の数です。これには Collision (衝突) 接触と Trigger (トリガー) 接触の両方が含まれます。接触の削除は素早く行われるので、パフォーマンスへの影響は最小限です。 | Removed Contacts | 不可 |
Broadphase Updates | このフレームで処理されたブロードフェーズ更新の数です。ブロードフェーズ更新は、物理形状が追加、削除、またはサイズ変更された時に発生します。ブロードフェーズ更新は、2 つの物理形状が重なる可能性があり、結果としてブロードフェーズペア (以下参照) が作成され得る場合に、接触の変更を検出するために使用されます。 | Broadphase Updates | 不可 |
Broadphase Pairs | このフレームで処理されたブロードフェーズペアの数です。ブロードフェーズペアは、ブロードフェーズ更新の結果として 2 つの物理形状が重なる可能性がある場合に作成されます。ブロードフェーズペアは、作成された後で処理され、その結果、新しい接触になるか、(物理形状が接触し合うように設定されていない場合は) 無視されます。 | Broadphase Pairs | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | このフレームで呼び出された、OnCollisionEnter2D、OnCollisionStay2D、OnCollisionExit2D、OnTriggerEnter2D、OnTriggerStay2D、および OnTriggerExit2D コールバックの総数です。 | Total Callbacks | 不可 |
Collision Enter | このフレームで呼び出された OnCollisionEnter2D コールバックの数です。 | Collision Enter | 不可 |
Collision Stay | このフレームで呼び出された OnCollisionStay2D コールバックの数です。 | Collision Stay | 不可 |
Collision Exit | このフレームで呼び出された OnCollisionExit2D コールバックの数です。 | Collision Exit | 不可 |
Trigger Enter | このフレームで呼び出された OnTriggerEnter2D コールバックの数です。 | Trigger Enter | 不可 |
Trigger Stay | このフレームで呼び出された OnTriggerStay2D コールバックの数です。 | Trigger Stay | 不可 |
Trigger Exit | このフレームで呼び出された OnTriggerExit2D コールバックの数です。 | Trigger Exit | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
World Count | このフレームに存在した 物理演算シーン の総数です。各物理演算シーンには 1 つの物理演算世界が含まれており、これは他の全ての物理演算世界から切り離してシミュレートすることができます。世界の数が多くても、それ自体はパフォーマンスの問題にはなりません。なぜなら、これはメモリを占有するだけで、シミュレーションが行われない限り何も実行しないからです。 | Solver World Count | 不可 |
Simulation Count | (Unity の Physics2D.Simulate の呼び出しで自動的に行われたか、PhysicsScene2D.Simulate の直接の呼び出しによって行われたかのいずれかの方法で) 全ての物理演算シーンのシミュレーションが行われた回数です。 | Solver Simulation Count | 不可 |
Discrete Islands | アイランドは、共有のジョイントや共有の接触によって接続される複数のボディの連結グラフです。Static (静的) ボディタイプはアイランドを接続しないことに注意してください。これは、非連続的な解決ステップの処理中に解決された接触アイランドの数です。 | Solver Discrete Islands | 不可 |
Continuous Islands | アイランドは、共有のジョイントや共有の接触によって接続される複数のボディの連結グラフです。Static (静的) ボディタイプはアイランドを接続しないことに注意してください。これは、連続的な解決ステップの処理中に解決された接触アイランドの数です。連続的アイランドの解決は非常にコストのかかる処理で、アイランドの再生成と再処理を要するイテレーションを何度も行う必要があります。したがって、これは最小限に抑える必要があります。こうした追加的な連続的アイランドの形成と処理を発生させるのは、Continuous (連続的) 衝突判定モードを使用した Rigidbody2D だけです。 | Solver Continuous Islands | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Sync Calls | このフレームで呼び出された Transform Sync コールの総数です。Transform Sync (Transform Read として知られる) では、Transform が変更されたかどうかのチェックが行われ、もし変更されている場合は Transform のポーズが読み取られて Rigidbody2D や Collider2D が更新されます。物理演算コンポーネントを使用する場合は Transform は変更すべきではありません。これが必要な場合もありますが、処理される数が多すぎるとパフォーマンスに問題が起きる可能性があるため、避ける必要があります。全ての動きは Rigidbody2D API を使用して処理する必要があります。 物理演算システムはシミュレーションステップの実行の最初の部分として 1 回の Transform Sync を実行するので、シミュレーションが発生した場合には、この数字は必ず少なくとも 1 になります (上記 Simulation Count 参照)。 Physics2D.AutoSyncTransforms (デフォルトでは非アクティブ) がアクティブな場合、あるいは Physics2D.SyncTransforms が呼び出された場合は、追加の呼び出しが行われますが、これらはどちらもパフォーマンスに深刻な影響を与えるため、避ける必要があります。 |
Total Transform Sync Calls | 不可 |
Sync Bodies | Transform Sync の影響を受けた Rigidbody2D の数です。これは最小限 (できれば 0) に抑える必要があります。 | Transform Sync Bodies | 不可 |
Sync Colliders | Transform Sync の影響を受けた Collider2D の数です。これは最小限 (できれば 0) に抑える必要があります。 | Transform Sync Colliders | 不可 |
Parent Sync Bodies | Transform の親の変更によって発生した Transform Sync の影響を受けた Rigidbody2D の数です。これは最小限 (できれば 0) に抑える必要があります。 | Transform Parent Sync Bodies | 不可 |
Parent Sync Colliders | Transform の親の変更によって発生した Transform Sync の影響を受けた Collider2D の数です。これは最小限 (できれば 0) に抑える必要があります。 | Transform Parent Sync Colliders | 不可 |
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Total | このフレームに存在した Joint2D の総数です。ジョイントの解決には高いコストがかかる可能性があるので、これは最小限に抑える必要があります。 | Total Joints | 不可 |
ノート: 全ての Timing (タイミング) は、全ての物理演算世界にわたっての合計です (World Count 参照)。タイミングが抽出された回数は、タイミング自体の後ろに続けて、角括弧内に表示されます。タイミングを World Count の値で割れば平均時間が算出できます。
統計 | 説明 | 対応のプロファイラーカウンター (正確な名称) | リリースプレイヤーで利用可能か |
---|---|---|---|
Sim | 完全なシミュレーションステップの処理に費やされた時間の合計です。これは、Unity によって (Physics2D.Simulate の呼び出しによって) 自動的に呼び出される場合と、直接の PhysicsScene2D.Simulate の呼び出しによって呼び出される場合があります。この時間には、Transform Sync (Read)、接触の計算、統合、接触とジョイントの解決、Transform Write、接触コールバックなどの、シミュレーションステップを完了に関わる全てのステージが含まれます。 | 該当なし | 該当なし |
Sync | Transform Sync (Sync Calls 参照) の処理に費やされた時間の合計です。 | 該当なし | 該当なし |
Step | シミュレーションステップの処理に費やされた時間の合計です。この時間には、シミュレーションステップの完了に関わるコアステージ (接触の計算、統合、接触とジョイントの解決など) のみが含まれます。 | 該当なし | 該当なし |
Write | Transform Write 処理に費やされた時間の合計です。これは、シミュレーションステップの終了中の、ボディポーズが読み取られて Transform システムに書き戻される時に発生します。 | 該当なし | 該当なし |
Callbacks | 全てのコールバックの処理に費やされた時間の合計です (コールバックの合計 参照)。 | 該当なし | 該当なし |
Legacy モードに切り替えると、(古いバージョンの Unity のデフォルトモジュールだった) 古いバージョンの Physics 2D Profiler モジュールを表示できます。これを行うには、Profiler モジュールの詳細ペインの右上にあるドロップダウンメニューから Legacy を選択してください。
このモードでは、古いバージョンの Unity で保存されたプロファイラーデータをロードして調査することができます。Unity の新しいバージョンでキャプチャされたデータを調査する時にこのモードに切り替えると、表示されるデータが信頼性の低い不正確なものになる可能性があります。最新バージョンの Unity の Physics 2D プロファイラーデータを確認する場合は、常に Current モードを使用することをお勧めします。