The Physics 2D ProfilerA window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating, or in your game logic. More info
See in Glossary module displays information about the physics that the physics system has processed in your project’s sceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary. This information can help you diagnose and resolve performance issues or unexpected discrepancies related to the physics in your project’s scene.
The Physics 2D Profiler module in the Profiler window
The Physics 2D Profiler module’s chart tracks different statistics related to the physics that the physics system processes in the project’s scene, divided into the following chart categories. Click on the frame chart window or select a captured frame in the chart graph to track selected categories. To change the order of the categories in the chart, drag and drop them in the chart’s legend. You can also click a category’s colored legend to toggle its display. Refer to the module details pane for more information about the selected statistics.
Chart | Description |
---|---|
Total Contacts | The total number of contacts that were present in this frame. This includes both CollisionA collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, when at least one has a Rigidbody component and is in motion. More info See in Glossary and Trigger contacts. Processing and solving contacts can be time consuming therefore they should be kept to a minimum. |
Total Shapes | The total number of physics shapes that were present in this frame. Different Collider2D produce different amounts of physics shapes ranging from one to unlimited. You can get the shape count and retrieve the physics shapes to determine this for any Collider2D. |
Total Queries | The total number of queries that were called this frame. This includes queries such as Physics2D.Raycast, Physics2D.OverlapPoint etc. |
Total Callbacks | The total number of OnCollisionEnter2D, OnCollisionStay2D, OnCollisionExit2D, OnTriggerEnter2D, OnTriggerStay2D and OnTriggerExit2D callbacks that were called in this frame. |
Total JointsA physics component allowing a dynamic connection between Rigidbody components, usually allowing some degree of movement such as a hinge. More info See in Glossary |
The total number of any Joint2D that were present in this frame. |
Total Bodies | The total number of Rigidbody2D that were present in this frame. |
Awake Bodies | The total number of Rigidbody2D that were both awake (not sleeping) and were present in this frame. |
Dynamic Bodies | The total number of Rigidbody2D with a Dynamic body typeDefines a fixed behavior for a 2D Rigidbody. Can be Dynamic (the body moves under simulation and is affected by forces like gravity), Kinematic (the body moves under simulation, but and isn’t affected by forces like gravity) or Static (the body doesn’t move under simulation). More info See in Glossary that were present in this frame. Dynamic bodies take the most processing of all body types therefore they should be kept to a minimum. |
Continuous Bodies | The total number of Rigidbody2D with a Continuous collision detectionAn automatic process performed by Unity which determines whether a moving GameObject with a Rigidbody and collider component has come into contact with any other colliders. More info See in Glossary mode that were present in this frame. Continuous bodies are much more expensive than when using Discrete collision detectionA collision detection method that calculates and resolves collisions based on the pose of objects at the end of each physics simulation step. More info See in Glossary mode therefore they should be kept to a minimum. |
Physics Used Memory | The total amount of persistent memory used exclusively by the 2D physics system. This includes both the core engine and the memory used by each physics component, but does not include the temporary memory used in this frame. |
When you select a frame in the Physics 2D Profiler module, the details pane displays detailed information about the physics in your project’s scene. The details pane is sorted by category, where each category exists on a single line.
The following reference table describes the statistics available, plus its corresponding profiler counterPlaced in code with the ProfilerCounter API to track metrics, such as the number of enemies spawned in your game. More info
See in Glossary, and availability in Release builds. The profiler counters are always available in the Editor and Development buildsA development build includes debug symbols and enables the Profiler. More info
See in Glossary. This information is also available via the ProfilerRecorder API and in the Profiler Module Editor so you can add them to a custom Profiler module.
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total amount of persistent memory used exclusively by the 2D physics system. This includes both the core engine and the memory used by each physics component, but does not include temporary memory used in this frame. | Physics Used Memory 2D | No |
Relative | The relative percentage of memory used by the 2D physics system compared to the overall memory usage of Unity. | N/A | N/A |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total number of Rigidbody2D that were present in this frame. | Total Bodies | No |
Awake | The number of Rigidbody2D that were both awake (not sleeping) and were present in this frame. Note that a Rigidbody2D with a Static body type is always asleep. | Awake Bodies | No |
Asleep | The number of Rigidbody2D that were both sleeping (not awake) and were present in this frame. Note that a Rigidbody2D with a Static body type is always asleep. | Asleep Bodies | No |
Dynamic | The number of Rigidbody2D with a Dynamic body type that were present in this frame. Dynamic bodies take the most processing of all body types therefore they should be kept to a minimum. | Dynamic Bodies | No |
Kinematic | The number of Rigidbody2D with a Kinematic body type that were present in this frame. Kinematic bodies have minimal processing therefore they should be used when explicit movement is required but reaction to external forces is not. | Kinematic Bodies | No |
Static | The number of Rigidbody2D with a Static body type that were present in this frame. Static bodies take the least processing of all body types therefore they should be used when possible where no movement is required. | Static Bodies | No |
Discrete | The number of Rigidbody2D with a Discrete collision detection mode that were present in this frame. Discrete bodies are far less expensive than when using Continuous collision detection mode therefore they should be used where possible. | Discrete Bodies | No |
Continuous | The number of Rigidbody2D with a Continuous collision detection mode that were present in this frame. Continuous bodies are much more expensive than when using Discrete collision detection mode therefore they should be kept to a minimum. | Continuous Bodies | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total number of physics shapes that were present in this frame.. Different Collider2D produce different amounts of physics shapes ranging from one to unlimited. You can get the shape count and retrieve the physics shapes to determine this for any Collider2D. | Total Shapes | No |
Awake | A physics shape is awake if it is attached to a Rigidbody2D that is awake. This is the number of physics shapes that were both awake (not sleeping) and were present in this frame. | Awake Shapes | No |
Asleep | A physics shape is asleep if it is attached to a Rigidbody2D that is asleep. This is the number of physics shapes that were both sleeping (not awake) and were present in this frame. | Asleep Shapes | No |
Dynamic | A physics shape is Dynamic if it is attached to a Rigidbody2D with a Dynamic body type. This is the number of physics shapes that were both Dynamic and were present in this frame. | Dynamic Shapes | No |
Kinematic | A physics shape is Dynamic if it is attached to a Rigidbody2D with a Kinematic body type. This is the number of physics shapes that were both Kinematic and were present in this frame. | Kinematic Shapes | No |
Static | A physics shape is Dynamic if it is attached to a Rigidbody2D with a Static body type. This is the number of physics shapes that were both Static and were present in this frame. | Static Shapes | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total number of queries that were called this frame. This includes queries such as Physics2D.Raycast, and Physics2D.OverlapPoint. | Total Queries | No |
Raycast | The number of ray or line based queries that were called this frame. This includes queries such as Physics2D.Raycast and Physics2D.Linecast. | Raycast Queries | No |
Shapecast | The number of shape swept queries that were called this frame. This includes queries such as Physics2D.BoxCast, Physics2D.CircleCast, and Collider2D.Cast. | Shapecast Queries | No |
Overlap | The number of overlap queries that were called this frame. This includes queries such as Physics2D.OverlapPoint, Physics2D.OverlapCircle, and Collider2D.OverlapCollider. | Overlap Queries | No |
IsTouching | The number of contact touching queries that were called this frame. This includes queries such as Physics2D.IsTouching, Collider2D.IsTouching, Rigidbody2D.IsTouching etc. | IsTouching Queries | No |
GetContacts | The number of contact retrieval queries that were called this frame. This includes queries such as Physics2D.GetContacts, Collider2D.GetContacts, and Rigidbody2D.GetContacts. Note that this does not include Collision2D.GetContacts which is not a physics query. | GetContacts Queries | No |
Particle | The number of queries that were called by the particle systemA component that simulates fluid entities such as liquids, clouds and flames by generating and animating large numbers of small 2D images in the scene. More info See in Glossary in this frame. This is used when the particle system module is configured to contact 2D physics CollidersAn invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object’s mesh - a rough approximation is often more efficient and indistinguishable in gameplay. More info See in Glossary and is entirely controlled by the particle system. Note that this can become quite high but is also very efficient to process. |
Particle Queries | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total number of contacts that were present in this frame. This includes both Collision and Trigger contacts. Processing and solving contacts can be time consuming therefore they should be kept to a minimum. | Total Contacts | No |
Added | The number of contacts that were added in this frame. This includes both Collision and Trigger contacts. Adding too many contacts in a single frame can cause performance spikes therefore this should be kept to a minimum. | Added Contacts | No |
Removed | The number of contacts that were removed in this frame. This includes both Collision and Trigger contacts. Removing contacts is fast and has minimum impact on performance. | Removed Contacts | No |
Broadphase Updates | The number of broadphase updates that were processed in this frame. A broadphase update occurs when physics shapes are added, removed or change in size. Broadphase updates are used to detect contact changes when two physics shapes potentially overlap and can result in a broadphase pair (see below) being created. | Broadphase Updates | No |
Broadphase Pairs | The number of broadphase pairs that were processed in this frame. A broadphase pair is created when a broadphase update results in a potential overlap of two physics shapes. A broadphase pair is then processed and the result will be a new contact or it will be ignored if the physics shapes are not configured to contact each other. | Broadphase Pairs | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total number of OnCollisionEnter2D, OnCollisionStay2D, OnCollisionExit2D, OnTriggerEnter2D, OnTriggerStay2D and OnTriggerExit2D callbacks that were called in this frame. | Total Callbacks | No |
Collision Enter | The number of OnCollisionEnter2D callbacks that were called in this frame. | Collision Enter | No |
Collision Stay | The number of OnCollisionStay2D callbacks that were called in this frame. | Collision Stay | No |
Collision Exit | The number of OnCollisionExit2D callbacks that were called in this frame. | Collision Exit | No |
Trigger Enter | The number of OnTriggerEnter2D callbacks that were called in this frame. | Trigger Enter | No |
Trigger Stay | The number of OnTriggerStay2D callbacks that were called in this frame. | Trigger Stay | No |
Trigger Exit | The number of OnTriggerExit2D callbacks that were called in this frame. | Trigger Exit | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
World Count | The total number of physics scene that were present in this frame. Each physics scene contains a physics world that can be simulated independently of any other physics world. Having a large number of worlds is not in of itself a performance issue because it will only occupy memory and not perform any work unless it is simulated. | Solver World Count | No |
Simulation Count | The number of times all physics scene were simulated either by Unity automatically, by calling Physics2D.Simulate or by directly calling PhysicsScene2D.Simulate. | Solver Simulation Count | No |
Discrete Islands | An island is a connected graph of bodies connected via mutual joints or mutual contacts. Note that Static body types do not connect islands. The number of contact islands solved when handling the discrete solving step. | Solver Discrete Islands | No |
Continuous Islands | An island is a connected graph of bodies connected via mutual joints or mutual contacts. Note that Static body types do not connect islands. This is the number of islands solved when handling the continuous solving step. Solving continuous islands is an extremely expensive process and involves multiple iterations that require islands to be regenerated and reprocessed so this should be kept to a minimum. Only a Rigidbody2D with a Continuous collision detection mode will result in this additional continuous island being formed and processed. | Solver Continuous Islands | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Sync Calls | The total number of Transform sync calls that were called in this frame. A Transform sync (known as a Transform Read) involves checking to see if any Transforms have changed and if so, the Transform poses are read and cause any Rigidbody2D or Collider2D to be updated. Transforms should not be changed when using physics components however sometimes this is necessary but should be avoided due to potential performance issues if performing too many. Any movements should be performed by using the Rigidbody2D API. The physics system will perform a single Transform sync as the first part of performing a simulation step so this will always be at least one if a simulation occurred (see Simulation Count above). The physics system will also perform a single Transform sync per-frame if it is handling any Rigidbody2D interpolation. Additional calls are shown if either Physics2D.AutoSyncTransforms is active (inactive by default) or if Physics2D.SyncTransforms is called although both of these should be avoided as they can both have a severe impact on performance. |
Total Transform Sync Calls | No |
Sync Bodies | The number of Rigidbody2D that were affected by a Transform sync. This should be kept to a minimum, preferably zero. | Transform Sync Bodies | No |
Sync Colliders | The number of Collider2D that were affected by a Transform sync. This should be kept to a minimum, preferably zero. | Transform Sync Colliders | No |
Parent Sync Bodies | The number of Rigidbody2D that were affected by a Transform sync caused by reparenting a Transform.. This should be kept to a minimum, preferably zero. | Transform Parent Sync Bodies | No |
Parent Sync Colliders | The number of Collider2D that were affected by a Transform sync caused by reparenting a Transform. This should be kept to a minimum, preferably zero. | Transform Parent Sync Colliders | No |
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Total | The total number of any Joint2D that were present in this frame. Solving joints can become expensive so these should be kept to a minimum. | Total Joints | No |
Note: All timings are summed over all physics worlds (see World Count). The number of times any timing was sampled is shown in square brackets after the timing itself. Effectively the timing can be divided by the World Count value to give an average time.
Statistic | Description | Corresponding Profiler Counter (exact name) | Available in Release Players? |
---|---|---|---|
Sim | The total amount of time spent handling a full simulation step. This can be called by Unity automatically, by calling Physics2D.Simulate or by directly calling PhysicsScene2D.Simulate. This time includes all the stages involved in completing a simulation step including Transform Sync (read), Calculating Contacts, Integration, Solving Contacts and Joints, Transform Write and Contact Callbacks. | N/A | N/A |
Sync | The total amount of time spent processing Transform Sync (see Sync Calls). | N/A | N/A |
Step | The total amount of time spent processing simulation steps. This time includes only the core stages involved in completing a simulation step including Calculating Contacts, Integration, Solving Contacts and Joints. | N/A | N/A |
Write | The total amount of time spent processing Transform write. This happens during the end of the simulation step where body poses are read and written back to the Transform system. | N/A | N/A |
Callbacks | The total amount of time spent processing all callbacks (see Total Callbacks). | N/A | N/A |
You can switch to the Legacy mode to see the older version of the Physics 2D Profiler module, which was the default module in older versions of Unity. To do this, select Legacy from the dropdown menu at the upper-right of the Profiler module’s details pane.
In this mode, you can load and inspect Profiler data that was saved in an older version of Unity. If you switch to this mode to inspect data captured in a newer version of Unity, then the data displayed may be unreliable and inaccurate. It is recommended to always use the Current mode to inspect Physics 2D Profiler data in current versions of Unity.