16.Unity性能分析工具-Profiler窗口Physics2D
16.1 知识点
Physics(2D)是什么
Physics(2D)(2D 物理学)模块是专门用于分析和排查 2D 物理系统(基于 Box2D 引擎)的性能与行为的工具,主要帮助我们排查 2D 物理相关问题。
使用 2D 物理系统制作的各类型游戏都可以使用该模块来分析排查问题。
Physics(2D)中各参数功能的含义和作用
2D物理学(Physics 2D)性能检测窗口

- Total Contacts:总接触点数。当前帧中发生接触的 2D 碰撞点数量(如 OnCollisionEnter2D 所对应的接触点)。值高说明有很多碰撞交互,可能带来性能开销
- Total Shapes:总碰撞形状数。场景中所有的 Collider2D 组件数(如 BoxCollider2D、CircleCollider2D 等)。用于评估物理形状规模
- Total Queries:总查询次数。这一帧中所有 2D 物理查询次数(如 Physics2D.Raycast、OverlapCircle、BoxCast 等)。值过高代表代码中有大量物理检测,可能是性能瓶颈
- Total Callbacks:总回调次数。本帧中触发的 2D 物理回调事件数量,如 OnCollisionEnter2D、OnTriggerEnter2D、OnJointBreak2D 等
- Total Joints:总关节数。当前场景中存在的所有 Joint2D(如 HingeJoint2D、SpringJoint2D 等)组件数量。值越高,物理系统连接关系越复杂
- Total Bodies:总刚体数。所有存在的 Rigidbody2D 数量(无论是否激活)。可以快速评估 2D 物理世界的规模
- Awake Bodies:唤醒的刚体数量。当前处于活跃状态、正在参与物理计算的 Rigidbody2D 数量(即未 Sleep() 的)
- Dynamic Bodies:动态刚体数量。Rigidbody2D.bodyType = Dynamic 的对象数量。会受到力、碰撞、重力影响
- Continuous Bodies:连续检测刚体数。启用了连续碰撞检测(CollisionDetectionMode2D.Continuous)的刚体数量。用于防止高速穿透,但性能消耗较大
- **Physics Used Memory (2D)**:2D 物理系统使用的总内存。包括所有刚体、碰撞器、关节、缓存等 Box2D 系统占用的内存。可用于分析是否有未释放的资源或超大结构
当前的信息窗口

Physics Used Memory(物理系统使用的内存)
- Total:当前 2D 物理系统(Box2D 引擎)使用的内存总量
- Relative:占整个应用程序内存的百分比
Bodies(刚体)/ Shapes(碰撞体)
- Total:Rigidbody2D 存在数量
- Awake:唤醒状态的刚体
- Asleep:休眠状态的刚体
- Dynamic / Kinematic / Static:动态/运动学/静态刚体数量
- Discrete / Continuous:启用离散或连续碰撞检测的刚体数量
Queries(物理查询)
- Raycasts:射线检测次数
- ShapeCast:图形投射次数
- Overlap:重叠检测次数(如 OverlapBox2D)
- IsTouching / GetContacts / Particle:查询碰撞接触或粒子系统交互
Contacts(接触点)
- Broadphase Updates / Pairs:广义碰撞检测
- Total / Added / Removed:碰撞总量/开始接触/结束接触
Callbacks(回调)
- Collision Enter / Stay / Exit:触发 OnCollisionEnter2D 等回调数量
- Trigger Enter / Stay / Exit:触发 Trigger 回调事件数量
Solver(求解器)
- World Count:物理世界存在数量(即 PhysicsScene2D)
- Simulation Count:有多少刚体参与模拟
- Discrete Islands / Continuous Islands:离散/连续物理模拟孤岛数量
Transform Sync(变换同步)
- Sync Calls:transform 同步操作(即 Transform 到 Rigidbody2D 的位置同步)
- Sync Bodies / Colliders:同步的刚体和碰撞体数
- Parent Sync Colliders:父子同步数量
Joints(关节)
Timings(耗时)
- Sim:模拟耗时
- Sync:同步耗时
- Step:模拟步进耗时
- Write:写入回调数据耗时
- Callbacks:触发回调耗时
遗留信息窗口(老版本)

可以忽略,当前的信息窗口更加详细。
- Total Bodies:刚体总数。场景中所有的 Rigidbody2D 数量,无论状态(活跃/休眠/动态/静态)
- Active Bodies:活跃刚体数。当前处于唤醒状态、正在参与物理模拟的 Rigidbody2D 数量
- Sleeping Bodies:休眠刚体数。当前处于休眠状态的刚体(不参与模拟,直到外力或碰撞唤醒)
- Dynamic Bodies:动态刚体数。Rigidbody2D.bodyType = Dynamic 的对象数,会受力、重力、碰撞影响
- Kinematic Bodies:运动学刚体数。bodyType = Kinematic 的刚体,不受物理力影响,通常由代码控制位置移动
- Static Bodies:静态刚体数。实际上是没有附加 Rigidbody2D 的 Collider2D 数量,视为静态体存在参与碰撞检测,但不移动
- Contacts:当前接触点数。本帧中所有 2D 刚体间的接触点数量(不区分 Enter/Stay/Exit),数量过多会增加求解压力
Physics(2D)对于我们的意义
它可以帮助我们排查:
是否有大量碰撞(影响性能)
关注:Total Contacts、Total Callbacks是否频繁查询物理(影响性能)
关注:Total Queries刚体是否过多(影响性能)
关注:Total Bodies、Awake Bodies、Dynamic Bodies使用了多少连续碰撞检测(影响性能)
关注:Continuous Bodies(建议仅用于子弹、快速移动体)内存是否异常
关注:Physics Used Memory(2D)(持续上升说明内存泄漏或资源未释放)Total Queries(查询总数)很高
可能原因:每帧大量 Raycast / Overlap2D
建议:合并检测逻辑、加帧间隔、限制 LayerTotal Callbacks(总回调次数)很高
可能原因:触发器 / 碰撞回调过多
建议:合并 Collider 区域、优化触发条件Continuous Bodies(连续检测刚体)很高
可能原因:连续检测滥用
建议:只给高速刚体启用 Continuous 模式Total Shapes(形状总数)极多
可能原因:拆分成太多 Collider2D
建议:合并静态物体碰撞体,如背景、地形等Physics Used Memory(总内存分配)持续上升
可能原因:未释放碰撞体或刚体
建议:检查动态创建对象是否被销毁
总之,该模块可以帮助我们快速定位 2D 物理瓶颈、验证物理逻辑是否正确触发、分析平台差异性等等。
16.2 知识点代码
Lesson16_Unity性能分析工具_Profiler窗口Physics2D.cs
public class Lesson16_Unity性能分析工具_Profiler窗口Physics2D
{
#region 知识点一 Physics(2D)是什么
/*
* Physics(2D)(2D 物理学)模块
* - 专门用于分析和排查 2D 物理系统(基于 Box2D 引擎)的性能与行为的工具
* - 主要帮助我们排查 2D 物理相关问题
*
* 使用 2D 物理系统制作的各类型游戏都可以使用该模块来分析排查问题
*/
#endregion
#region 知识点二 Physics(2D)中各参数功能的含义和作用
/*
* 界面参数功能:
* - 在思维导图中讲解
*/
#endregion
#region 知识点三 Physics(2D)对于我们的意义
/*
* 它可以帮助我们排查:
*
* 1. 是否有大量碰撞(影响性能)
* - 关注:Total Contacts、Total Callbacks
*
* 2. 是否频繁查询物理(影响性能)
* - 关注:Total Queries
*
* 3. 刚体是否过多(影响性能)
* - 关注:Total Bodies、Awake Bodies、Dynamic Bodies
*
* 4. 使用了多少连续碰撞检测(影响性能)
* - 关注:Continuous Bodies(建议仅用于子弹、快速移动体)
*
* 5. 内存是否异常
* - 关注:Physics Used Memory(2D)(持续上升说明内存泄漏或资源未释放)
*
* 6. Total Queries(查询总数)很高
* - 可能原因:每帧大量 Raycast / Overlap2D
* - 建议:合并检测逻辑、加帧间隔、限制 Layer
*
* 7. Total Callbacks(总回调次数)很高
* - 可能原因:触发器 / 碰撞回调过多
* - 建议:合并 Collider 区域、优化触发条件
*
* 8. Continuous Bodies(连续检测刚体)很高
* - 可能原因:连续检测滥用
* - 建议:只给高速刚体启用 Continuous 模式
*
* 9. Total Shapes(形状总数)极多
* - 可能原因:拆分成太多 Collider2D
* - 建议:合并静态物体碰撞体,如背景、地形等
*
* 10. Physics Used Memory(总内存分配)持续上升
* - 可能原因:未释放碰撞体或刚体
* - 建议:检查动态创建对象是否被销毁
*
* 总结:该模块可以帮助我们快速定位 2D 物理瓶颈、验证物理逻辑是否正确触发、分析平台差异性等等
*/
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com