Physics Profiler 显示物理引擎在场景中已处理的物理统计信息。此信息有助于诊断和解决与场景中的物理相关的性能问题或意外差异。
另请参阅物理调试可视化。
属性 | 功能 |
---|---|
Active Dynamic | 非睡眠的非运动刚体组件的数量。 |
Active Kinematic | 非睡眠的运动刚体组件的数量。请注意,已附加关节的运动刚体组件可能每帧被处理多次,这会计入显示的数量中。在帧中调用 MovePosition 或 MoveRotation 时,运动刚体处于活动状态,并在下一帧中保持活动状态。 |
Static Colliders | 未附加刚体组件或父游戏对象未附加刚体组件的游戏对象上的碰撞体组件数。如果此类游戏对象或其父游戏对象具有刚体组件,则碰撞体将不计为静态碰撞体。这些碰撞器称为复合碰撞体。这有助于以方便的方式排列多个碰撞体,而不是将所有碰撞体放在与刚体组件相同的游戏对象上。 |
Rigidbody | 物理引擎处理的刚体组件数量(与组件的睡眠状态无关)。 |
Trigger Overlaps | 重叠触发器的数量(成对计数)。 |
Active Constraints | 物理引擎处理的原始约束的数量。约束用作关节的构建块以及碰撞响应。例如,限制 ConfigurableJoint 的线性或旋转自由度涉及每个限制的基本约束。 |
Contacts | 场景中所有碰撞体之间的触点对总数,也包括触发器重叠对的数量。请注意,一旦每个碰撞体对之间的距离低于特定的用户可配置限制,该碰撞体对就会创建一个触点对,因此可能会看到针对尚未接触或重叠的刚体组件生成的触点。有关更多详细信息,请参阅 Collider.contactOffset 和 ContactPoint.separation。 |
注意:
这些数字可能与场景中具有物理组件的游戏对象的确切数量不对应。这是因为有些物理组件以不同的速率处理,具体取决于其他组件产生的影响(例如,附加的关节组件)。要计算附加了特定物理组件的游戏对象的确切数量,请使用 FindObjectsOfType 函数编写自定义脚本。
Physics Profiler 不显示睡眠刚体组件的数量。这些是与物理引擎无关的组件,因此不由 Physics Profiler 处理。有关睡眠刚体组件的更多信息,请参阅刚体概述:睡眠。
物理模拟在主逻辑更新循环的单独固定频率更新周期中运行,只能通过每次调用的 Time.fixedDeltaTime 推进时间。这类似于 Update 和 FixedUpdate 之间的区别(有关更多信息,请参阅关于 Time 窗口的文档)。
当出现需要很长时间的复杂逻辑或图形帧时,Physics Profiler 必须每帧多次调用物理模拟。这意味着已经占用大量资源的帧会占用更多的时间和资源,这很容易导致物理模拟因为 Maximum Allowed Timestep 值(设置菜单:__Edit__ > Project Settings__,然后选择 Time__ 类别)而暂时停止。
可在项目中检测到这一点,方法是选择 CPU Usage Profiler 并在 Overview 部分中检查 Physics.Processing 或 Physics.Simulate 的调用次数。
在此示例图中,__Calls__ 列中的值 1 表示物理模拟在最后一个逻辑帧上被调用一次。
调用计数接近 10 可能表示存在问题。第一种解决方案是降低物理模拟的频率;如果问题仍然存在,请检查在 Physics Profiler 必须使用大量模拟调用以便追赶游戏时间之前可能是什么原因导致了大型帧。有时,大型的图形帧可能会导致稍后在场景中进行更多物理模拟调用。
如需了解场景中的物理模拟的更多详细信息,请单击三角形箭头以展开 __Physics.Processing__,如上面的截屏所示。此时可看到为更新场景而运行的物理引擎任务的实际名称。可能会看到的两个最常见的名称为:
__Pxs__:“PhysX 解算器”(PhysX solver) 的缩写,是关节所需的以及用于解算重叠体触点的物理引擎任务。
__ScScene__:更新场景、运行宽阶段和窄阶段以及整合刚体(由于力和冲量将它们移动到空间中)所需的任务。请参阅 Steven M. LaValle 的“规划算法”(Planning Algorithms) 了解两阶段碰撞检测阶段的定义。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.