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