Unity3D:Physics Profiler 模块

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
Physics Profiler 模块
物理性能刻画器模块显示有关物理系统在项目场景中处理的物理场的信息。此信息可帮助您诊断和解决与项目场景中的物理场相关的性能问题或意外差异。您还可以使用物理场调试可视化来进一步调试和了解应用程序中的物理场问题。

图表类别
物理性能分析器模块的图表跟踪应用程序在物理上花费的时间。计时分为不同的图表类别。要更改图表中类别的顺序,您可以在图表的图例中拖动它们。您还可以单击类别的彩色图例以切换其显示。单击图表时,可以在图表下方的模块详细信息窗格中看到每个图表类别的确切数值。
图表 | 功能 |
---|---|
物理使用的内存 | 物理模块已使用的内存总量 |
主动动态体 | 未处于睡眠状态的刚体组件和关节主体组件的数量。 |
主动运动体 | 活动运动刚体组件的数量。在帧中调用 MovePosition 或 MoveRotate 时,运动刚体处于活动状态,并在下一帧中保持活动状态。 注: Unity 可能会处理每帧多次连接接头的运动刚体构件,这会影响显示的值。 |
动态体 | 刚体构件和铰接体构件的数量。 |
重叠 | 重叠事件的数量。重叠事件是指碰撞体彼此重叠。 |
触发器重叠 | 触发碰撞器的重叠事件数(成对计数)。 |
谨慎的重叠 | Unity 使用离散碰撞检测求解的重叠事件数。 |
连续重叠 | Unity 使用连续碰撞检测求解的重叠事件数。 |
物理查询 | 物理查询的总量,例如光线投射和形状投射。 |
模块详细信息面板
单击“物理刻画器”模块时,模块详细信息窗格将显示有关项目场景中物理场的更多信息。
统计信息 | 描述 | |
---|---|---|
物理使用的内存 | 物理模块已使用的内存总量。 | |
动态体 | 刚体构件和铰接体构件的数量。 | |
铰接体 | 场景中关节主体组件的数量 | |
主动动态体 | 未处于睡眠状态的刚体组件和铰接体组件的数量。 | |
主动运动体 | 活动运动刚体组件的数量。在帧中调用 MovePosition 或 MoveRotate 时,运动刚体处于活动状态,并在下一帧中保持活动状态。 注: Unity 可能会处理每帧多次连接接头的运动刚体构件,这会影响显示的值。 | |
静态碰撞体 | 没有刚体或铰接体组件的碰撞体数量 | |
碰撞体已同步 | 与变换同步的碰撞体数量。 | |
刚体同步 | 与变换同步的刚体组件的数量。 | |
物理查询 | 物理查询的总量,例如光线投射和形状投射。 | |
总重叠 | 重叠事件的数量。重叠事件是指碰撞体彼此重叠。 | |
谨慎 | Unity 使用离散碰撞检测求解的重叠事件数。 | |
连续的 | Unity 使用连续碰撞检测求解的重叠事件数。 | |
触发器 | 触发碰撞器的重叠事件数(成对计数)。 | |
改 性 | Unity 使用联系人修改 API 修改的重叠事件数。 | |
宽相添加/删除 | 宽相算法添加或删除的碰撞体总数。 | |
窄相触摸 | 自上一帧以来丢失或显示为新的碰撞事件的总数。 |
性能分析器中显示的数字可能与场景中具有物理组件的游戏对象的确切数量不对应。这是因为 Unity 处理某些物理组件的速率不同,具体取决于影响它的其他组件(例如,附加的 Joint 组件)。要计算附加了特定物理组件的游戏对象的确切数量,必须使用 FindObjectsOfType 函数编写自定义脚本。
物理刻画器模块不显示休眠刚体组件的数量。这些组件不与物理系统接合,因此性能分析器不会处理它们。有关休眠刚体组件的详细信息,请参阅有关刚体的文档。
了解物理性能问题
物理模拟在主逻辑更新循环的单独固定频率更新周期中运行,只能通过每次调用的 Time.fixedDeltaTime 推进时间。 这类似于 Update 和 FixedUpdate 之间的区别。 有关更多信息,请参阅关于 Time 窗口的文档。
当一个复杂逻辑或图形帧需要很长时间时,此性能分析器必须每帧多次调用物理模拟。 这意味着已经占用大量资源的帧会占用更多的时间和资源。 这可能导致物理模拟会根据 Maximum Allowed Timestep 值而暂时停止; 这个值可在 Project Settings 窗口(菜单:__Edit > Project Settings > Time__)中设置。
要在项目中检测到这一点,请选择 CPU Usage Profiler 模块 并在 Hierarchy 视图中的 Overview 部分中检查 Physics.Processing 或 Physics.Simulate 的调用次数。

在此示例图像中,“调用”列中的值 2 表示在最后一个逻辑帧中调用了两次物理模拟。
呼叫计数接近 10 可能表示存在问题。作为第一个解决方案,降低物理模拟的频率,如果问题仍然存在,请在物理系统不得不使用大量模拟调用来赶上游戏时间之前检查可能导致重帧的原因。有时,繁重的图形框架可能会导致稍后在场景中调用更多的物理模拟。
有关场景中物理模拟的更多详细信息,请选择模块详细信息窗格顶部的搜索框,搜索 Physics.Processing,然后从窗格右上角的下拉列表中选择“调用”。这将显示为更新场景而运行的物理系统任务的名称。您可能会看到的两个最常见的名称是:
- Pxs:“PhysX 求解器”的缩写,是关节所需的物理系统任务,以及用于解析重叠刚体组件的接触。
- ScScene:用于更新场景、运行宽相位和窄相位以及集成刚体组件(由于力和脉冲而在空间中移动它们)的任务。有关更多信息,请参阅 Steven M. LaValle 关于规划算法的工作,了解两阶段碰撞检测阶段的定义。
旧版物理刻画器模块
您可以切换到旧版模式以查看旧版本的物理刻画器模块,这是旧版 Unity 中的默认模块。为此,请从物理性能分析器模块详细信息窗格右上角的下拉菜单中选择“旧版”。
在此模式下,您可以加载和检查保存在旧版 Unity 中的性能分析器数据。如果切换到此模式以检查在较新版本的 Unity 中捕获的数据,则显示的数据不可靠且不准确。应始终使用“当前”模式检查新的物理场剖析器数据。

统计信息 | 描述 |
---|---|
主动动态 | 活动状态的非运动刚体组件的数量。 活动状态的刚体是指未处于睡眠状态的刚体。 |
主动运动学 | 活动运动刚体组件的数量。在帧中调用 MovePosition 或 MoveRotate 时,运动刚体处于活动状态,并在下一帧中保持活动状态。 注: Unity 可能会处理每帧多次连接接头的运动刚体构件,这会影响显示的值。 |
静态碰撞体 | 游戏对象上没有将刚体组件附加到游戏对象或其父游戏对象的碰撞体组件的数量。 具有刚体组件的游戏对象或父游戏对象上的碰撞体组件不计为静态碰撞体。这些被称为复合对撞机。复合碰撞体以方便的方式排列一个体的多个碰撞体,而不是将所有碰撞体与刚体组件放在同一个游戏对象上。 |
刚体 | 物理系统处理的刚体组件的数量,与组件的休眠状态无关。 |
触发器重叠 | 重叠触发器的数量(成对计数)。 |
活动约束 | 物理系统已处理的基元约束的数量。约束用作关节和碰撞响应的构建块。例如,限制可配置关节的线性或旋转自由度涉及每个限制的基元约束。 |
接触 | 场景中所有碰撞体之间的接触对总数,包括触发器重叠对的数量。接触是一对接触或重叠的碰撞体。注意:一旦碰撞体之间的距离低于某个用户可配置的限制,Unity 就会为每个碰撞体对创建接触对。因此,您可能会看到为刚体零部件生成的接触尚未接触或重叠。有关更多详细信息,请参阅有关 Collider.contactOffset 和 ContactPoint.separation 的文档。 |
此文由3D建模学习工作室整理翻译,转载请注明出处!