UPL2-9——Physics 模块
UPL2-9——Physics 模块
关于物理模块相关,详见:U1L13——物理系统碰撞体相关,U2L13——物理系统范围和射线检测相关
Physics 模块
Physics(物理学)模块是专门用于监控 物理系统(3D 物理)运行状态与性能开销 的工具,它涵盖了 Rigidbody、Collider、碰撞检测、物理查询等运行时数据
主要帮助我们排查 3D 物理相关问题,在游戏中如果出现以下问题时,可以着重观察这里的内容:
- 碰撞相关逻辑不触发
- 性能异常抖动(可能是物理计算量太大)
- 射线检测变慢
- 物理不稳定
等等
总之,几乎所有和 3D 物理相关的问题,我们都可以通过该模块进行排查
Physics 中各参数功能的含义和作用

-
物理学(Physics)分析窗口

-
Physics Used Memory:当前物理系统使用的总内存量(包括碰撞体、刚体、内部缓存等)
如果持续上升或占用过高,可能存在碰撞体未销毁或分配过多的问题
-
Active Dynamic Bodies:当前活动中的动态刚体(
Rigidbody)数量(受力、移动、正在计算中)是物理运算的主要开销来源,数量越多计算越重
-
Active Kinematic Bodies:当前活动中的运动学刚体(
isKinematic = true)数量虽不受物理驱动,但仍会影响碰撞检测,数量多时也有开销
-
Dynamic Bodies:所有存在的动态刚体数量(包括非活动的)
用于判断是否创建了过多物理对象、未及时销毁
-
Overlaps:本帧中发生的碰撞重叠事件总数(包括触发器)
用于判断是否物体堆叠太多,或重叠检测负担重
-
Trigger Overlaps:本帧中发生的
Trigger(触发器)之间或与刚体之间的重叠事件数量用于判断是否大量使用触发器,逻辑处理是否冗余
-
Discreet Overlaps:使用离散检测模式(Discrete)的碰撞重叠数量
默认检测模式,适用于大多数物体,效率较高
-
Continuous Overlaps:使用连续检测模式(Continuous / Continuous Dynamic)的碰撞重叠数量
连续检测更精确但开销大,数量多时需关注性能
-
Physics Queries:本帧中所有物理查询的调用次数(如 射线检测、范围检测 等)
频繁的物理查询是物理系统性能瓶颈的重要来源,过多需优化
-
-
Current 当前的信息窗口

-
Physics Used Memory:当前物理系统使用的总内存量(包括碰撞体、刚体、内部缓存等)
如果持续上升或占用过高,可能存在碰撞体未销毁或分配过多的问题
-
Dynamic Bodies:所有存在的动态刚体数量(包括非活动的)
用于判断是否创建了过多物理对象、未及时销毁
-
Articulation Bodies:关节刚体数量,表示场景中启用了 ArticulationBody(关节体) 的对象个数
此类刚体通常用于高级机器人结构或物理链式系统。相比普通
Rigidbody开销大,慎用!
如果数量太大(上百个),说明使用过多,建议减少数量 -
Active Dynamic Bodies:当前活动中的动态刚体(
Rigidbody)数量(受力、移动、正在计算中)是物理运算的主要开销来源,数量越多计算世界越长
-
Active Kinematic Bodies:当前活动中的运动学刚体(
isKinematic = true)数量虽不受物理驱动,但仍会影响碰撞检测,数量多时也有开销
-
Static Colliders:静态碰撞体数量(无
Rigidbody 的 Collider )是绑定在静态对象(如场景建筑、地面等)上的碰撞体总数。0这类碰撞体不会随时间移动,效率较高。
但过多也会增加碰撞体树构建成本,需合并或使用批处理。尽量用最少的碰撞盒表示对象体积范围 -
Colliders Synced:本帧同步到物理系统的碰撞体数量
表示 Unity 本帧向物理引擎同步的
Collider数量(例如位置/旋转发生变化)
频繁变动会导致物理系统不断重建碰撞体结构,影响性能
尽量使用刚体加力的形式让对象移动 -
Rigidbodies Synced:本帧同步到物理系统的刚体数量
频繁设置
transform.position 或修改velocity都会触发同步,尤其在大批量刚体上影响显著
尽量使用刚体加力的形式让对象移动 -
Physics Queries:本帧中所有物理查询的调用次数(如 射线检测、范围检测 等)
频繁的物理查询是物理系统性能瓶颈的重要来源,过多需优化
-
Total Overlaps:重叠检测总数量,在其中可以看到不同类型的情况
-
Discreet:离散检测重叠数
正常游戏中这一项会是最多的
-
Continuous:连续检测重叠数
建议仅对高速移动物体(如子弹、快速飞行物)使用连续检测,其它物体请用 Discrete
-
Trigger:触发器重叠次数
尽量避免重叠区域之间反复进入退出
-
Modified:修改过的碰撞体参与的重叠次数
在本帧中修改过的碰撞体(如大小、位置、开关状态等)所参与的重叠检测次数
这类操作通常会强制 Unity 更新碰撞体树结构,产生额外开销
-
-
Broadphase Adds/Removes:广义阶段的添加和移除
广义阶段:用来快速判断哪些物体“可能发生碰撞”,通常使用 包围盒(AABB) 进行粗略检测,性能消耗低、处理大批量对象的效率高
-
Adds:本帧中,被添加到物理世界中、需要参与碰撞检测的新对象(或更新后重新注册的对象)数量
例如:新创建了一个带
Collider的物体,或修改了碰撞体的位置/尺寸等 -
Removes:本帧中,被从 Broadphase 系统中移除的碰撞体数量
例如:销毁了对象、禁用了
Collider、将其移出物理世界
关注点:
- 当 Adds 和 Removes 只有0~几十个时是正常范围
- 若 Adds 和 Removes 达到几百以上,需要关注,可能存在频繁修改或销毁碰撞体的逻辑
- 若 Adds 和 Removes 达到上千甚至持续增长,则说明严重性能问题,建议重点优化对象生命周期管理
-
-
Narrowphase Adds/Removes:狭义阶段的添加和移除
狭义阶段:对 Broadphase 结果中的物体做更精确的碰撞计算(如
Mesh vs.Capsule),开销大,但只处理可能碰撞的对象-
New:新增精确碰撞对数量
表示本帧中,首次发生精确碰撞检测的物体对数量。也就是两个 Collider 首次接触,需要进入精确计算流程
-
Lost:丢失精确碰撞对数量
表示本帧中,不再发生碰撞的物体对数量。也就是上一帧接触,本帧分离,因此这个“碰撞对”失效了
注意:这些统计的是
Collider 与Collider 之间的成对检测关系,不包括Trigger类型的重叠检测
关注点:
- New 和 Lost 都比较稳定且不高,正常,无需担心
- New 和 Lost 每帧几百甚至上千,说明接触频繁创建销毁,可能有性能问题
- New 持续增长而 Lost 很少,可能创建了很多新物体但未释放
- Lost 持续增长而 New 很少,可能大量销毁物体但未创建新物体或发生了某种分离行为
-
-
-
Legacy 旧版信息窗口
可以忽略,当前的信息窗口更加详细

-
Active Dynamic:活跃的动态刚体数
当前正在运动、受力或碰撞的
Rigidbody数量(即处于活跃状态的非静止刚体)。是物理计算的主要开销源 -
Active Kinematic:活跃的运动学刚体数
当前正在被手动控制位置或旋转(
isKinematic = true)且仍参与物理系统交互的对象数量。例如用于角色控制器、动画驱动骨骼等。 -
Static Colliders:静态碰撞体数量
不随时间移动的
Collider(没有Rigidbody组件)的数量
它们不会触发物理运算,但对碰撞查询仍有负担。 -
Rigidbody:场景中存在的刚体总数
所有带
Rigidbody的对象数量,包括动态和运动学刚体,不区分是否活跃。 -
Trigger Overlaps:触发器重叠事件总数
所有
isTrigger = true 的Collider 之间、或 Trigger 与刚体之间本帧发生的重叠事件数量
用于触发OnTriggerEnter/Exit/Stay等脚本回调 -
Active Constraints:活跃的物理约束数量
当前物理系统中处于活动状态的 Constraints(如 FixedJoint、HingeJoint 等连接组件)数量
用于连接多个刚体的链式结构、关节等。约束计算较重,需关注数量 -
Contacts:当前帧中检测到的接触点总数
所有
Collider 间的物理接触点总数(即OnCollision等物理相关生命周期函数会被触发的接触)
表示物理引擎本帧精确处理了多少碰撞点。
-
Physics 对于我们的意义
Physics(物理学)模块可以帮助我们:
-
排查是否有未释放的物理对象(内存泄露)
关注:Physics Used Memory(物理系统使用内存)、Dynamic Bodies(动态刚体数量)
观察物理内存是否持续增长,是否及时销毁不再使用的对象 -
排查是否物理模拟压力过大(游戏卡顿、掉帧、场景中物理资源太多)
关注:Active Dynamic Bodies(活动中的动态刚体数量)
降低动态刚体数量,或分批激活 -
排查 Trigger 性能瓶颈?(动画或角色互动异常)
关注:Trigger Overlaps(触发器和刚体之间的重叠数两)
合理使用 Trigger 区域,避免频繁进入 / 退出 -
排查物理查询是否过多?(查询性能异常)
关注:Physics Queries(物理查询数)
优化射线和物理查询逻辑,限制帧内调用次数 -
排查平台差异性
对比不同设备对物理性能的影响(低端机上尤为重要)
等等
总之,该模块可以帮助我们进行性能和内存问题定位,提供优化思路、分析平台差异性等等
