2D 物理性能分析器模块参考
2D 物理性能分析器 (Physics 2D Profiler) 模块显示物理系统在项目场景中已处理的物理的相关信息。此信息有助于诊断和解决与项目场景中的物理相关的性能问题或意外差异。
要打开性能分析器 (Profiler) 窗口,请转到菜单:窗口 (Window) > 分析 (Analysis) > 性能分析器 (Profiler)。
图表类别
2D 物理性能分析器模块的图表跟踪与物理系统在项目场景中处理的物理相关的不同统计信息,分为以下图表类别。单击帧图表窗口或在图表中选择捕获的帧以跟踪所选类别。要更改图表中类别的顺序,可以在图表的图例中拖放这些类别。还可以单击某个类别的有色图例以切换是否显示该类别。请参阅模块详细信息面板以了解有关所选统计信息的更多信息。
模块详细信息面板
在 2D 物理性能分析器模块中选择帧时,详细信息面板中会显示有关项目场景中的物理的详细信息。详细信息面板按类别排序,其中每个类别都占用一行。
以下参考表介绍了可用统计信息及其相应的性能分析器计数器,以及发布构建中的可用性。性能分析器计数器始终在编辑器和开发构建中可用。此信息也可通过 ProfilerRecorder API 及性能分析器模块编辑器 (Profiler Module Editor) 获得,因此可以将它们添加到自定义性能分析器模块中。
物理系统使用内存
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
| Total |
2D 物理系统专用的持久内存的总量。其中包括核心引擎和每个物理组件使用的内存,但不包括此帧中使用的临时内存。 |
Physics Used Memory 2D |
否 |
| Relative |
2D 物理系统使用的内存与 Unity 整体内存使用量的相对百分比。 |
不适用 |
不适用 |
物理体
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
| Total |
此帧中存在的 2D 刚体的总数。 |
Total Bodies |
否 |
| Awake |
处于唤醒(未睡眠)状态并存在于此帧中的 2D 刚体的数量。请注意,具有静态物理体类型的 2D 刚体始终处于睡眠状态。 |
Awake Bodies |
否 |
| Asleep |
处于睡眠(未唤醒)状态并存在于此帧中的 2D 刚体的数量。请注意,具有静态物理体类型的 2D 刚体始终处于睡眠状态。 |
Asleep Bodies |
否 |
| Dynamic |
此帧中存在的具有动态物理体类型的 2D 刚体的数量。动态物理体在所有物理体类型中处理量最多,因此应将此值保持在最低限度。 |
Dynamic Bodies |
否 |
| Kinematic |
此帧中存在的具有运动物理体类型的 2D 刚体的数量。运动物理体具有极小的处理量,因此,当需要显式移动但不对外力做出反应时,应使用运动物理体。 |
Kinematic Bodies |
否 |
| Static |
此帧中存在的具有静态物理体类型的 2D 刚体的数量。静态物理体在所有物理体类型中处理量最少,因此应尽可能在不需要移动的位置上使用此类物理体。 |
Static Bodies |
否 |
| Discrete |
此帧中存在的具有离散碰撞检测模式的 2D 刚体的数量。离散物理体的成本远低于使用连续碰撞检测模式的成本,因此应尽可能使用离散物理体。 |
Discrete Bodies |
否 |
| Continuous |
此帧中存在的具有连续碰撞检测模式的 2D 刚体的数量。连续物理体的成本远高于使用离散碰撞检测模式的成本,因此应将此值保持在最低限度。 |
Continuous Bodies |
否 |
形状
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
| Total |
此帧中存在的物理形状的总数。不同的 2D 碰撞体会产生不同数量的物理形状,范围从 1 到无限。可以获取形状计数并检索物理形状以确定任何 2D 碰撞体的形状。 |
Total Shapes |
否 |
| Awake |
物理形状如果附加到处于唤醒状态的 2D 刚体上,则处于唤醒状态。这是处于唤醒(未睡眠)状态并存在于此帧中的物理形状的数量。 |
Awake Shapes |
否 |
| Asleep |
物理形状如果附加到处于睡眠状态的 2D 刚体上,则处于睡眠状态。这是处于睡眠(未唤醒)状态并存在于此帧中的物理形状的数量。 |
Asleep Shapes |
否 |
| Dynamic |
物理形状如果附加到具有动态物理体类型的 2D 刚体上,则处于动态状态。这是处于动态状态并存在于此帧中的物理形状的数量。 |
Dynamic Shapes |
否 |
| Kinematic |
物理形状如果附加到具有运动物理体类型的 2D 刚体上,则处于运动状态。这是处于运动状态并存在于此帧中的物理形状的数量。 |
Kinematic Shapes |
否 |
| Static |
物理形状如果附加到具有静态物理体类型的 2D 刚体上,则处于静态状态。这是处于静态状态并存在于此帧中的物理形状的数量。 |
Static Shapes |
否 |
查询
Contacts
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
| Total |
此帧中存在的接触的总数。其中包括碰撞接触和触发器接触。处理和解算接触可能很耗时,因此应将此值保持在最低限度。 |
Total Contacts |
否 |
| Added |
此帧中已添加的接触的数量。其中包括碰撞接触和触发器接触。单个帧中添加过多接触可能会导致性能尖峰,因此应将此值保持在最低限度。 |
Added Contacts |
否 |
| Removed |
此帧中已移除的接触的数量。其中包括碰撞接触和触发器接触。移除接触的速度很快,对性能的影响最小。 |
Removed Contacts |
否 |
| Broadphase Updates |
此帧中处理的宽阶段更新的数量。添加、移除物理形状或改变其大小时,将发生宽阶段更新。在两个物理形状可能重叠时,宽阶段更新用于检测接触变化,并可能导致创建宽阶段对(见下文)。 |
Broadphase Updates |
否 |
| Broadphase Pairs |
此帧中处理的宽阶段对的数量。当宽阶段更新导致两个物理形状可能重叠时,将创建宽阶段对。宽阶段对随后经过处理,产生一个新的接触,或者如果未将物理形状配置为彼此接触,则会忽略该宽阶段对。 |
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
|
此帧中存在的物理场景的总数。每个物理场景包含一个物理世界,可以独立于任何其他物理世界进行模拟。拥有大量世界本身并不会导致性能问题,因为它只会占用内存,除非进行模拟,否则不会执行任何工作。 |
Solver World Count |
否 |
|
Simulation Count
|
通过 Unity 自动、通过调用 Physics2D.Simulate 或通过直接调用 PhysicsScene2D.Simulate 模拟所有物理场景的次数。 |
Solver Simulation Count |
否 |
| Discrete Islands |
孤岛是通过相互关节或相互接触连接的物理体的连接图。请注意,静态物理体类型不会连接孤岛。处理离散解算步骤时解算的接触孤岛的数量。 |
Solver Discrete Islands |
否 |
| Continuous Islands |
孤岛是通过相互关节或相互接触连接的物理体的连接图。请注意,静态物理体类型不会连接孤岛。这是处理连续解算步骤时解算的孤岛的数量。解算连续孤岛是一个成本极高的过程,涉及多次迭代,需要重新生成和再处理孤岛,因此应将此值保持在最低限度。只有具有连续碰撞检测模式的 2D 刚体才会导致此额外连续孤岛的形成和处理。 |
Solver Continuous Islands |
否 |
变换同步
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
|
Sync Calls
|
此帧中调用的变换同步调用的总数。变换同步(也称为变换读取)涉及检查是否有任何变换组件 (Transform) 已更改,如果有,则读取变换组件姿势,并更新任何 2D 刚体或 2D 碰撞体。使用物理组件时不应更改变换组件,但有时必须执行此操作,但如果执行次数过多,可能会产生性能问题,因此应加以避免。任何移动都应使用 Rigidbody2D API 执行。
物理系统将执行单个变换同步作为执行模拟步骤的第一步,因此如果发生模拟,则始终至少执行一个变换同步(请参阅上面的 Simulation Count)。如果物理系统正在处理任何 2D 刚体插值,则还会每帧执行单个变换同步。
如果 Physics2D.AutoSyncTransforms 处于活动状态(默认情况下处于非活动状态)或调用了 Physics2D.SyncTransforms,则会显示其他调用,但应避免这两种调用,因为它们都可能对性能产生严重影响。 |
Total Transform Sync Calls |
否 |
| Sync Bodies |
受变换同步影响的 2D 刚体的数量。此值应保持在最低限度,最好为零。 |
Transform Sync Bodies |
否 |
| Sync Colliders |
受变换同步影响的 2D 碰撞体的数量。此值应保持在最低限度,最好为零。 |
Transform Sync Colliders |
否 |
| Parent Sync Bodies |
受变换同步影响的 2D 刚体的数量,该变换同步是由为变换组件重定父级引起的。此值应保持在最低限度,最好为零。 |
Transform Parent Sync Bodies |
否 |
| Parent Sync Colliders |
受变换同步影响的 2D 碰撞体的数量,该变换同步是由为变换组件重定父级引起的。此值应保持在最低限度,最好为零。 |
Transform Parent Sync Colliders |
否 |
关节
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
| Total |
此帧中存在的所有 2D 关节的总数。解算关节的成本较高,因此应将此值保持在最低限度。 |
Total Joints |
否 |
用时
注意:所有用时为所有物理世界中的用时求和(参阅 World Count)。任何用时采样的次数都显示在用时本身的方括号内。实际上,用时可以除以世界计数 (World Count) 的值来得出平均时间。
| 统计信息 |
描述 |
相应的性能分析器计数器(确切名称) |
是否在发布播放器中可用? |
| Sim |
处理完整模拟步骤所花费的总时间。通过 Unity 自动、通过调用 Physics2D.Simulate 或通过直接调用 PhysicsScene2D.Simulate 可以调用此信息。此时间包括完成模拟步骤涉及的所有阶段,包括变换同步(读取)、计算接触、集成、解算接触和关节、变换写入和接触回调。 |
不适用 |
不适用 |
| Sync |
处理变换同步所花费的总时间(请参阅 Sync Calls)。 |
不适用 |
不适用 |
| Step |
处理模拟步骤所花费的总时间。此时间仅包括完成模拟步骤涉及的核心阶段,包括计算接触、集成、解算接触和关节。 |
不适用 |
不适用 |
| Write |
处理变换写入所花费的总时间。此过程发生在模拟步骤结束时,此时将读取物理体姿势并将其写回变换系统。 |
不适用 |
不适用 |
| Callbacks |
处理所有回调所花费的总时间(请参阅 Total Callbacks)。 |
不适用 |
不适用 |
其他资源