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