UPL2-10——Physics (2D) 模块
UPL2-10——Physics (2D) 模块
2D 物理相关,详见:U3L9——2D物理系统
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 系统占用的内存
可用于分析是否有未释放的资源或超大结构。
-
-
Current 当前的信息窗口

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

-
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
建议:合并检测逻辑、加帧间隔、限制 Layer -
Total Callbacks(总回调次数) 很高
可能原因:触发器 / 碰撞回调过多
建议:合并 Collider 区域、优化触发条件 -
Continuous Bodies(连续监测刚体) 很高
可能原因:连续检测滥用
建议:只给高速刚体启用 Continuous 模式 -
Total Shapes(形状总数) 极多
可能原因:拆分成太多 Collider2D
建议:合并静态物体碰撞体,如背景、地形等 -
Physics Used Memory(总内存分配) 持续上升
可能原因:未释放碰撞体或刚体
建议:检查动态创建对象是否被销毁
总之,该模块可以帮助我们快速定位 2D 物理瓶颈、验证物理逻辑是否正确触发、分析平台差异性等等
