物理分析器帮助您优化游戏的窗口。它显示游戏在各个领域花费了多少时间。例如,它可以报告渲染、动画或游戏逻辑中花费的时间百分比。 更多信息
参见 词汇表模块显示有关项目场景场景包含游戏的环境和菜单。将每个独特的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是在一块一块地设计和构建您的游戏。 更多信息
参见 词汇表中物理系统处理的物理信息。这些信息可以帮助您诊断和解决与项目场景中的物理相关的性能问题或意外差异。您也可以使用物理调试可视化来进一步调试和理解应用程序中物理相关的问题。
要打开分析器窗口,请转到菜单:窗口 > 分析 > 分析器。
物理分析器模块的图表跟踪应用程序在物理上花费的时间。计时被划分为不同的图表类别。要更改图表中类别的顺序,您可以将它们拖动到图表的图例中。您也可以单击类别彩色图例以切换其显示。当您单击图表时,您可以在模块详细信息窗格中看到每个图表类别在图表下方的精确数值。
图表 | 函数 |
---|---|
物理使用的内存 | 物理模块使用的内存总量 |
活动动态刚体 | 不在休眠状态的刚体允许游戏对象受到模拟重力和其它力的组件。 更多信息 参见 词汇表组件和关节体组件的数量。 |
活动运动学刚体 | 活动运动学刚体组件的数量。当在一个帧中调用MovePosition或MoveRotation时,运动学刚体处于活动状态,并在下一帧保持活动状态。 注意:Unity 可能每帧多次处理具有连接的关节的运动学刚体组件,这会导致显示的值增加。 |
动态刚体 | 刚体组件和关节体组件的数量。 |
重叠 | 重叠事件的数量。重叠事件是指碰撞器用于处理对象物理碰撞的不可见形状。碰撞器不需要与对象的网格完全相同形状 - 粗略的近似通常更有效并且在游戏玩法中难以区分。 更多信息 参见 词汇表相互重叠时发生的事件。 |
触发器重叠 | 与触发器碰撞器发生的重叠事件的数量(成对计数)。 |
离散重叠 | Unity 使用离散碰撞当物理引擎检测到两个游戏对象的碰撞器接触或重叠时,发生碰撞,此时至少有一个碰撞器具有刚体组件并且处于运动状态。 更多信息 参见 词汇表检测来解决的重叠事件的数量。 |
连续重叠 | Unity 使用连续碰撞检测Unity 执行的一个自动过程,它确定具有刚体和碰撞器组件的移动游戏对象是否与任何其他碰撞器接触。 更多信息 参见 词汇表来解决的重叠事件的数量。 |
物理查询 | 物理查询的总量,例如射线投射和形状投射。 |
当您单击物理分析器模块时,模块详细信息窗格将显示有关项目场景中物理的更多信息。
统计 | 描述 | |
---|---|---|
物理使用的内存 | 物理模块使用的内存总量。 | |
动态刚体 | 的刚体组件和关节体组件的数量。 | |
关节体 | 场景中关节体组件的数量 | |
活动动态刚体 | 不在休眠状态的刚体组件和关节体组件的数量。 | |
活动运动学刚体 | 活动运动学刚体组件的数量。当在一个帧中调用MovePosition或MoveRotation时,运动学刚体处于活动状态,并在下一帧保持活动状态。 注意:Unity 可能每帧多次处理具有连接的关节的运动学刚体组件,这会导致显示的值增加。 |
|
静态碰撞器 | 没有刚体或关节体组件的碰撞器的数量 | |
同步的碰撞器 | 与变换同步的碰撞器数量。 | |
同步的刚体 | 与变换同步的刚体组件数量。 | |
物理查询 | 物理查询的总量,例如射线投射和形状投射。 | |
总重叠 | 重叠事件的数量。重叠事件是指碰撞器相互重叠时发生的事件。 | |
离散 | Unity 使用离散碰撞检测一种碰撞检测方法,它根据每个物理模拟步骤结束时对象的姿态来计算和解决碰撞。 更多信息 参见 词汇表来解决的重叠事件的数量。 |
|
连续 | Unity 使用连续碰撞检测一种碰撞检测方法,它在整个物理模拟步骤中计算和解决碰撞。这可以防止快速移动的对象在模拟步骤中穿过墙壁。 更多信息 参见 词汇表来解决的重叠事件的数量。 |
|
触发器 | 与触发器碰撞器发生的重叠事件的数量(成对计数)。 | |
已修改 | Unity 使用接触修改API 来修改的重叠事件的数量。 | |
广相添加/删除 | 广相算法添加或删除的碰撞器总数。 | |
窄相接触 | 自上一帧以来消失或出现为新的碰撞事件的总数。 |
分析器中显示的数字可能与场景中具有物理组件的游戏对象Unity 场景中的基本对象,可以代表角色、道具、场景、摄像机、航路点等等。游戏对象的函数通过附加到它的组件来定义。 更多信息
参见 词汇表的精确数量不符。这是因为 Unity 根据影响它的其它组件(例如附加的关节组件)以不同的速率处理某些物理组件。要计算具有附加的特定物理组件的游戏对象的精确数量,您必须使用FindObjectsOfType函数编写一个自定义脚本。
物理分析器模块不显示休眠刚体组件的数量。这些是与物理系统不交互的组件,因此分析器不会处理它们。有关休眠刚体组件的更多信息,请参见有关刚体的文档。
物理模拟以独立于主逻辑更新循环的固定频率更新周期运行,并且只能通过每个调用Time.fixedDeltaTime来推进时间。这类似于Update和FixedUpdate之间的区别。有关此的更多信息,请参见时间窗口的文档。
当一个繁重的逻辑或图形帧占用很长时间时,分析器必须每帧多次调用物理模拟。这意味着已经占用大量资源的帧会占用更多的时间和资源。这可能会导致物理模拟根据允许的最大时间步长值暂时停止,您可以在项目设置窗口(菜单:编辑 > 项目设置 > 时间)中设置该值。
要检测项目中的这种情况,请选择CPU 使用情况分析器模块,然后在层次结构视图中的概述部分检查Physics.Processing或Physics.Simulate的调用次数。
在此示例图像中,调用列中的值 2 表示物理模拟在上次逻辑帧中被调用了两次。
接近 10 的调用次数可能表明存在问题。作为第一个解决方案,降低物理模拟的频率,如果问题仍然存在,请检查可能导致物理系统在赶上游戏时间时必须使用大量模拟调用之前的繁重帧。有时,繁重的图形帧可能会在场景中稍后导致更多物理模拟调用。
有关场景中物理模拟的更详细的信息,请选择模块详细信息窗格顶部的搜索框,搜索Physics.Processing,然后从窗格右上角的下拉菜单中选择调用。这将显示更新场景时运行的物理系统任务的名称。您最有可能看到的两个最常见的名称是
您可以切换到传统模式以查看旧版本的物理分析器模块,这是 Unity 旧版本中的默认模块。为此,请从物理分析器模块详细信息窗格右上角的下拉菜单中选择传统。
在此模式下,您可以加载和检查在旧版 Unity 中保存的 Profiler 数据。如果您切换到此模式以检查在较新版 Unity 中捕获的数据,则显示的数据不可靠且不准确。您应始终使用 **当前** 模式来检查新的 Physics Profiler 数据。
统计 | 描述 |
---|---|
活动动态 | 活动非运动学刚体组件的数量。活动刚体是指未 休眠 的刚体。 |
活动运动学 | 活动运动学刚体组件的数量。当在一个帧中调用MovePosition或MoveRotation时,运动学刚体处于活动状态,并在下一帧保持活动状态。 注意:Unity 可能会每帧处理多次具有连接关节的运动学刚体组件,这会导致显示的值增加。 |
静态碰撞器 | 游戏对象上没有刚体组件附加到游戏对象或其父游戏对象的碰撞器组件的数量。 游戏对象或父游戏对象上具有刚体组件的碰撞器组件不计为静态碰撞器。这些被称为复合碰撞器。复合碰撞器以方便的方式排列身体的多个碰撞器,而不是将所有碰撞器放在与刚体组件相同的游戏对象上。 |
刚体 | 物理系统处理的刚体组件的数量,与组件的休眠状态无关。 |
触发器重叠 | 重叠触发器的数量(以对计)。 |
活动约束 | 物理系统已处理的原始约束的数量。约束用作关节以及碰撞响应的构建块。例如,限制 ConfigurableJoint 的线性或旋转自由度涉及每个限制的原始约束。 |
接触 | 场景中所有碰撞器之间的接触对总数,包括触发器重叠对的数量。接触是两对碰撞器,它们要么接触,要么重叠。注意:Unity 为每个碰撞器对创建接触对,一旦它们之间的距离低于某个用户可配置的限制。因此,您可能会看到为尚未接触或重叠的刚体组件生成的接触。有关更多详细信息,请参阅有关 Collider.contactOffset 和 ContactPoint.separation 的文档。 |