二维物理 性能分析器一个窗口,帮助您优化游戏。它显示了游戏中的各个区域花费的时间量。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。 更多信息
在 术语表中查看模块显示了项目中 场景一个场景包含您的游戏的环境和菜单。想象一下每个独特的场景文件就像一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是在分块设计和构建您的游戏。更多信息
在 术语表中查看中物理系统处理过的物理信息。这些信息可以帮助您诊断并解决与项目场景中的物理相关的性能问题或意外差异。
性能分析器窗口中的二维物理性能分析器模块
二维物理性能分析器模块的图表跟踪与项目中场景中物理系统处理的物理相关的不同统计数据,分为以下图表类别。点击帧图表窗口或选择图表图中捕获的帧以跟踪所选类别。要更改图表中类别的顺序,请在图表的图例中拖放。您还可以单击一个类别的彩色图例以切换其显示。有关所选统计数据的更多信息,请参阅模块详情面板。
图表 | 描述 |
---|---|
总接触数 | 在此帧中存在的总接触数。这包括 碰撞碰撞发生时,物理引擎检测到两个GameObject的Collider组件接触或重叠,至少一个具有Rigidbody组件且正在移动。更多信息 在 术语表中查看和触发接触。处理和解决接触可能会消耗时间,因此应将它们保持在最小值。 |
总形状数 | 在此帧中存在的物理形状总数。不同的Collider2D会产生不同数量的物理形状,从1个到无限个。您可以通过获取形状计数和检索物理形状来为此任何Collider2D确定这一点。 |
总查询数 | 在此帧中调用的总查询数。这包括Physics2D.Raycast、Physics2D.OverlapPoint等查询。 |
总回调数 | 在此帧中调用的总OnCollisionEnter2D、OnCollisionStay2D、OnCollisionExit2D、OnTriggerEnter2D、OnTriggerStay2D和OnTriggerExit2D回调数。 |
总数量 关节允许 Rigidbody 组件之间动态连接的物理组件,通常允许一定程度的移动,如铰链。更多信息 查看术语表 |
本帧中存在的任何 Joint2D 的总数量。 |
总刚体 | 本帧中存在的 Rigidbody2D 的总数量。 |
唤醒刚体 | 本帧中同时 唤醒(非睡眠)且存在的 Rigidbody2D 的总数量。 |
动力学刚体 | 本帧中存在的具有 动力学 身体类型定义 2D Rigidbody 的固定行为。可以是动力学(运动体在仿真中移动,并受到如重力等力的作用)、动力学(运动体在仿真中移动,但不受到重力等力的影响)或静态(运动体在仿真中不移动)。更多信息 查看术语表 的总数量。动力学刚体比所有身体类型需要最多的处理,因此应尽可能减少。 |
连续刚体 | 本帧中存在的具有 连续 碰撞检测Unity 自动执行的过程,用于确定带有 Rigidbody 和碰撞组件的移动 GameObject 是否与其他碰撞体接触。更多信息 查看术语表 模式的 Rigidbody2D 的总数量。与使用 离散碰撞检测一种基于每个物理仿真步骤中对象的姿态计算和解决碰撞的碰撞检测方法。更多信息 查看术语表 模式相比,连续刚体花费更多,因此应尽可能减少。 |
使用的物理内存 | 仅由 2D 物理系统专用的持久内存总数量。这包括核心引擎以及每个物理组件使用的内存,但不包括本帧中使用的临时内存。 |
当你在物理 2D 分析模块中选择一个帧时,详细信息面板会显示项目中场景中物理的详细信息。详细信息面板按类别排序,每个类别位于一行。
以下参考表描述了可用的统计数据,以及相应的性能计数器通过ProfilerCounter API嵌入到代码中以跟踪指标,例如在游戏中生成的敌人数量。更多信息
参见术语表以及发布版本中的可用性。性能计数器始终在编辑器和开发版本包括调试符号并启用性能分析器。更多信息
参见术语表中可用。这些信息还可以通过ProfilerRecorder API和在性能模块编辑器中获取,以便您可以将它们添加到自定义性能模块中。
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 仅由2D物理系统专用的持久性内存总量。这包括核心引擎以及每个物理组件使用的内存,但不包括帧内使用的临时内存。 | 2D物理使用内存 | 否 |
相对 | 与Unity整体内存使用量相比,2D物理系统使用的内存相对百分比值。 | 不适用 | 不适用 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 本帧中存在的 Rigidbody2D 的总数量。 | 总刚体 | 否 |
唤醒 | 在这帧中既唤醒(非睡眠)又在场的Rigidbody2D的数量。请注意,具有静态类型的Rigidbody2D始终处于睡眠状态。 | 唤醒刚体 | 否 |
睡眠 | 在这帧中既睡眠(非唤醒)又在场的Rigidbody2D的数量。请注意,具有静态类型的Rigidbody2D始终处于睡眠状态。 | 睡眠物体 | 否 |
动态 | 在这帧中出现具有动态类型的Rigidbody2D的数量。动态物体比所有其他类型都需要最多的处理,因此应将它们保持到最少。 | 动力学刚体 | 否 |
运动学 | 在这帧中出现具有运动学类型的Rigidbody2D的数量。运动学物体需要的处理最少,因此当需要明确的移动但不需要对外部力的反应时,应使用它。 | 运动学物体 | 否 |
静态 | 在这帧中出现具有静态类型的Rigidbody2D的数量。静态物体需要的处理最少,因此在没有需要移动的情况下应尽可能使用。 | 静态物体 | 否 |
离散 | 在这帧中出现具有离散碰撞检测模式的Rigidbody2D的数量。与使用连续碰撞检测模式相比,离散物体开销更小,因此应尽可能使用。 | 离散物体 | 否 |
连续 | 在这帧中出现具有连续碰撞检测模式的Rigidbody2D的数量。与使用离散碰撞检测模式相比,连续体开销更大,因此应尽可能将其保持到最少。 | 连续刚体 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 本帧中存在的物理形状的总数。不同的Collider2D会产生不同数量的物理形状,数量从一到无限。您可以获取形状数量和检索物理形状来决定任何Collider2D的这个数字。 | 总形状数 | 否 |
唤醒 | 如果一个物理形状连接到一个Rigidbody2D并且该Rigidbody2D处于活动状态,则该物理形状是活动的。这是指本帧中既处于活动状态(非睡眠)又存在的物理形状数量。 | 活动形状 | 否 |
睡眠 | 如果一个物理形状连接到一个处于睡眠状态的Rigidbody2D,则该物理形状是睡眠的。这是指本帧中既处于睡眠状态(非活动)又存在的物理形状数量。 | 睡眠形状 | 否 |
动态 | 如果一个物理形状连接到一个具有动态类型的Rigidbody2D,则该物理形状是动态的。这是指本帧中既为动态又存在的物理形状数量。 | 动态形状 | 否 |
运动学 | 如果一个物理形状连接到一个具有运动学类型的Rigidbody2D,则该物理形状是运动学的。这是指本帧中既为运动学又存在的物理形状数量。 | 运动学形状 | 否 |
静态 | 如果一个物理形状连接到一个具有静态类型的Rigidbody2D,则该物理形状是静态的。这是指本帧中既为静态又存在的物理形状数量。 | 静态形状 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 本帧中调用的查询总数。这包括Physics2D.Raycast和Physics2D.OverlapPoint等查询。 | 总查询数 | 否 |
射线投射 | 本帧中调用的基于射线或线的查询数量。这包括Physics2D.Raycast和Physics2D.Linecast等查询。 | 射线投射查询 | 否 |
形状投射 | 本帧中调用的形状投射查询数量。这包括Physics2D.BoxCast、Physics2D.CircleCast和Collider2D.Cast等查询。 | 形状投射查询 | 否 |
交叉 | 本帧中调用的交叉查询数量。这包括Physics2D.OverlapPoint、Physics2D.OverlapCircle和Collider2D.OverlapCollider等查询。 | 交叉查询 | 否 |
接触 | 本帧中调用的接触触摸查询数量。这包括Physics2D.IsTouching、Collider2D.IsTouching、Rigidbody2D.IsTouching等。 | 接触触摸查询 | 否 |
获取接触 | 本帧中调用的接触检索查询数量。这包括Physics2D.GetContacts、Collider2D.GetContacts和Rigidbody2D.GetContacts等查询。注意,这不包括Collision2D.GetContacts,因为它不是一个物理查询。 | 获取接触查询 | 否 |
粒子 | 本帧中粒子系统(一种通过在场景中生成和动画化大量小2D图像来模拟流体质,如液体、云和火焰的组件)被调用的查询数量。当粒子系统模块配置为与2D物理碰撞体(一种用于处理物体物理碰撞的无形形状。碰撞体不需要与物体的网格形状完全相同,通常粗略近似更高效且在游戏中难以区分。详见更多信息)接触且完全由粒子系统控制时使用。注意,这可能会相当高,但处理效率也非常高。 | 粒子查询 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 本帧中存在的所有接触点的总数。这包括碰撞和触发接触点。处理和解决接触点可能会耗费时间,因此应尽量减少。 | 总接触数 | 否 |
添加 | 本帧中添加的接触点数量。这包括碰撞和触发接触点。在一个单独的帧中添加过多接触点会导致性能波动,因此应尽量减少。 | 添加的接触点 | 否 |
移除 | 本帧中移除的接触点数量。这包括碰撞和触发接触点。移除接触点速度快,对性能的影响最小。 | 移除的接触点 | 否 |
粗略阶段更新 | 本帧中处理的粗略阶段更新的数量。当物理形状被添加、移除或更改大小时,会发生粗略阶段更新。粗略阶段更新用于检测两个物理形状之间可能的重叠,并可能导致创建新的粗略阶段配对(见下文)。 | 粗略阶段更新 | 否 |
粗略阶段配对 | 本帧中处理的粗略阶段配对数量。当粗略阶段更新导致两个物理形状可能重叠时,将创建粗略阶段配对。然后处理该配对,结果将是一个新的接触点,如果物理形状未配置为接触,则将忽略。 | 粗略阶段配对 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 在此帧中调用的总OnCollisionEnter2D、OnCollisionStay2D、OnCollisionExit2D、OnTriggerEnter2D、OnTriggerStay2D和OnTriggerExit2D回调数。 | 总回调次数 | 否 |
碰撞进入 | 本帧中被调用的 OnCollisionEnter2D 回调函数次数。 | 碰撞进入 | 否 |
碰撞持续 | 本帧中被调用的 OnCollisionStay2D 回调函数次数。 | 碰撞持续 | 否 |
碰撞退出 | 本帧中被调用的 OnCollisionExit2D 回调函数次数。 | 碰撞退出 | 否 |
触发进入 | 本帧中被调用的 OnTriggerEnter2D 回调函数次数。 | 触发进入 | 否 |
触发持续 | 本帧中被调用的 OnTriggerStay2D 回调函数次数。 | 触发持续 | 否 |
触发退出 | 本帧中被调用的 OnTriggerExit2D 回调函数次数。 | 触发退出 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
世界计数 | 本帧中存在的 物理场景 的总数。每个物理场景都包含一个物理世界,可以独立于任何其他物理世界进行模拟。拥有大量世界本身并不是性能问题,因为它只会占用内存,除非进行模拟。 | 求解器世界计数 | 否 |
模拟次数 | 自动由 Unity 调用或通过调用 Physics2D.Simulate 或直接调用 PhysicsScene2D.Simulate 来模拟所有物理场景的次数。 | 求解器模拟次数 | 否 |
离散岛屿 | 岛屿是通过 mutual joints 或 mutual contacts 连接的身体的连接图。请注意,静态 身体类型不会连接岛屿。处理离散求解步骤时解决的接触岛屿数量。 | 求解器离散岛屿 | 否 |
连续岛屿 | 岛屿是通过相互连接的关节或接触相互连接的物体的连通图。请注意,静态体类型不会连接岛屿。这是处理连续求解步骤时解决的岛屿数量。解决连续岛屿是一个极其昂贵的进程,涉及到多次迭代,需要重新生成和重新处理岛屿,因此应将其保持到最小。只有具有Rigidbody2D和连续碰撞检测模式的连续碰撞检测才会导致形成并处理此附加的连续岛屿。 | 解决连续岛屿 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
同步调用 | 在此帧中调用的变换同步调用(称为变换读取)的总数。变换同步涉及检查是否有变换已更改,如果是这样,则读取变换姿势并导致任何Rigidbody2D或Collider2D被更新。当使用物理组件时不应更改变换,但有时这是必要的,但应避免,因为过多的操作可能会导致潜在的性能问题。任何移动都应通过使用Rigidbody2D API 来执行。 物理系统将执行单次变换同步作为执行模拟步骤的第一部分,因此如果进行了模拟,这将是至少一次的(见上面的模拟计数)。如果物理系统正在处理任何Rigidbody2D插值,它还将每帧执行单次变换同步。 如果Physics2D.AutoSyncTransforms活动(默认情况下不活动)或调用Physics2D.SyncTransforms,则显示附加调用,尽管应避免这两个选项,因为它们都可能对性能产生严重影响。 |
总变换同步调用 | 否 |
同步体 | 受变换同步影响的Rigidbody2D的数量。这应保持在最小,最好是零。 | 变换同步体 | 否 |
同步碰撞体 | 受变换同步影响的Collider2D的数量。这应保持在最小,最好是零。 | 变换同步碰撞体 | 否 |
父级同步体 | 由变换的重新父级引起的受变换同步影响的Rigidbody2D的数量。这应保持在最小,最好是零。 | 变换父级同步体 | 否 |
父级同步碰撞体 | 由变换的重新父级引起的受变换同步影响的Collider2D的数量。这应保持在最小,最好是零。 | 变换父级同步碰撞体 | 否 |
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
总计 | 本帧中任何 Joint2D 的总数。解决关节可能会变得昂贵,因此这些应保持在最小。 | 总关节 | 否 |
注意:所有计时总和都针对所有物理世界(见世界计数)。显示在计时本身之后方括号中的任何计时样本的次数。实际上,可以将计时除以世界计数值以得出平均值。
统计数据 | 描述 | 相应的性能计数器(精确名称) | 发布玩家中可用? |
---|---|---|---|
模拟 | 处理完整模拟步骤所需的总时间。这可以通过调用Physics2D.Simulate或直接调用PhysicsScene2D.Simulate来自动调用。此时间包括完成模拟步骤所涉及的各个阶段,包括变换同步(读取)、计算碰撞、积分、解决碰撞和关节、变换写入和碰撞回调。 | 不适用 | 不适用 |
同步 | 处理变换同步(见同步调用)所需的总时间。 | 不适用 | 不适用 |
步骤 | 处理模拟步骤所需的总时间。此时间仅包括完成模拟步骤的核心阶段,包括计算碰撞、积分、解决碰撞和关节。 | 不适用 | 不适用 |
写入 | 处理Transform写入所花费的总时间。这发生在模拟步骤的末尾,此时读取和将身体姿势写回Transform系统。 | 不适用 | 不适用 |
回调函数 | 处理所有回调所花费的总时间(见总回调)。 | 不适用 | 不适用 |
您可以通过切换到旧版模式来查看Physics 2D分析器模块的旧版本,该模块是Unity旧版本中的默认模块。为此,请在分析器模块详情面板右上角的下拉菜单中选择旧版。
在此模式下,您可以加载数据并检查在Unity旧版本中保存的分析器数据。如果您切换到此模式以检查联网版本的Unity中捕获的数据,则显示的数据可能不可靠且不准确。建议始终使用当前模式来检查当前版本Unity中的Physics 2D分析器数据。