要应用 3D 物理的全局设置,请使用物理 (Physics) 设置(主菜单:编辑 (Edit) > 项目设置 (Project Settings),然后选择物理 (Physics) 类别)。
注意:要管理 2D 物理的全局设置,请改为使用 2D 物理 (Physics 2D) 设置。
Physics 设置定义 3D 物理模拟精度的限制。在大多数情况下,更精确的模拟需要更多的处理开销,因此这些设置提供了一种精度与性能的折衷方法。
物理 (Physics) 面板包含用于定义要在项目中使用的物理 SDK 的设置。
| 设置 | 描述 |
|---|---|
| GameObject SDK | 定义要用于管理项目中游戏对象的物理模拟的 SDK。默认设置是自动 (Auto)。设置为无 (None) 可禁用项目中游戏对象的物理模拟。 |
物理 (Physics) 设置还包含一个设置 (Settings) 面板。
设置 (Settings) 面板包含所有 Physics SDK 的设置。包含的选项卡如下:
共享 (Shared) 选项卡包含适用于所有 Physics SDK 的全局设置。
| 属性 | 功能 |
|---|---|
| Gravity | 使用 x、y 和 z 轴设置应用于所有刚体组件的重力。对于真实的重力设置,应将负数应用于 y 轴。重力以每平方秒的世界单位定义。 注意:如果增大重力,可能还需要增大默认解算器迭代次数 (Default Solver Iterations) 值以保持稳定的接触。 |
| Layer Collision Matrix | 定义基于层的碰撞检测系统的行为方式。要选择碰撞矩阵中的哪些层与其他层交互,请勾选其相应的复选框。 |
游戏对象 (GameObject) 选项卡包含适用于项目中的所有游戏对象的全局物理设置。
| 属性 | 功能 | |
|---|---|---|
| Default Material | 设置在没有为单独碰撞体分配材质的情况下需要使用的默认物理材质。 | |
| Bounce Threshold | 设置速度值。如果两个碰撞对象的相对速度低于此值,则它们在碰撞后不会相互反弹。此值还可以减少抖动,因此不建议将其设置为非常低的值。 | |
| 默认最大穿透速度 (Default Max Depenetration Velocity) | 定义最大穿透速度的默认值(穿透速度是解算器在尝试使物体与其他物体不重叠时可以将物体设置为的速度)。 | |
| Sleep Threshold | 设置一个全局能量阈值;当低于该阈值时,非运动刚体(即不受物理系统控制的刚体)可进入睡眠状态。刚体处于睡眠状态不会每帧更新,因此可减少资源消耗。如果刚体的动能除以其质量低于此阈值,该刚体将作为睡眠候选者。 | |
| Default Contact Offset | 设置碰撞检测系统用于产生碰撞接触的距离。该值必须为正,如果设置得太接近零,可能导致抖动。默认情况下,该值设置为 0.01。仅当碰撞体的距离小于其接触偏移值的总和时,碰撞体才产生碰撞接触。 | |
| Default Solver Iterations | 定义 Unity 在每个物理帧运行的解算器进程数。解算器是小型物理引擎任务,决定了许多物理交互,例如关节运动或管理重叠刚体组件之间的接触。 此设置会影响解算器输出的质量,如果使用非默认的 Time.fixedDeltaTime,或者配置要求极高,建议更改此属性。通常,此属性用于减少关节或接触引起的抖动。 |
|
| Default Solver Velocity Iterations | 设置解算器在每个物理帧中执行的速度进程数。解算器执行的进程越多,刚体反弹后产生的退回速度的精度就越高。如果遇到连接的刚体组件或布娃娃在碰撞后移动太多的问题,请尝试增加此值。 | |
| Queries Hit Backfaces | 如果希望物理查询(例如 Physics.Raycast)检测是否命中 MeshColliders 的背面三角形,请启用此选项。默认情况下会禁用此设置。 |
|
| Queries Hit Triggers | 如果希望物理命中测试(例如射线投射、SphereCasts 和 SphereTests)在与标记为触发器的碰撞体相交时返回命中,请启用此选项。单个射线投射可以覆盖此行为。默认情况下会启用此设置。 | |
| Enable Adaptive Force | 启用此选项可启用自适应作用力。自适应作用力会影响通过一堆对象传递力的方式,可提供更真实的行为。默认情况下会禁用此设置。 | |
| Contacts Generation | 选择接触生成方法。 | |
| 旧式接触生成 | 在 Unity 5.5 之前,Unity 使用了基于分离轴定理 (SAT) 的接触生成方法。 PCM 效率更高,但对于较旧的项目,您可能会发现继续使用 SAT 更容易,以避免需要稍微调整物理系统。PCM 可以产生稍微不同的反弹,并且最终进入接触缓冲区的无用接触会减少(即,在传递给 OnCollisionEnter、OnCollisionStay 和 OnCollisionExit 的 Collision 实例中获得的数组)。升级建议:要迁移使用 Unity 2018.2 或更低版本制作的项目,可能需要更新脚本才能使用在流形中合并补丁并选择接触的代码。 |
|
| Persistent Contacts Manifold (PCM) | 每个物理帧生成更少的接触,跨帧共享更多接触数据。PCM 接触生成路径也更准确,并通常在大多数情况下产生更好的碰撞反馈。有关更多信息,请参阅有关 Persistent Contact Manifold 的 Nvidia 文档。 这是默认值。 |
|
| Simulation Mode | 选择 Unity 执行物理模拟的时间。默认值为固定更新 (Fixed Update)。 | |
| Fixed Update | 在 MonoBehaviour.FixedUpdate 后立即执行物理模拟。 |
|
| Update | 在 MonoBehaviour.Update 后立即执行物理模拟。 |
|
| Script | 在脚本调用 Physics.Simulate 时执行物理模拟。 |
|
| Auto Sync Transforms | 启用此选项可在变换组件发生更改时自动将变换更改与物理系统同步。默认情况下会禁用此设置。 | |
| Reuse Collision Callbacks | 启用以重复使用碰撞回调。物理系统仅创建碰撞 (Collision) 类型的单个实例,并将其用于每个单独的回调。这样可以减少垃圾回收器处理的浪费,并提高性能。默认情况下会启用此属性。 | |
| Invoke Collision Callbacks | 将 OnCollisionEnter、OnCollisionStay 和 OnCollisionExit 的 MonoBehaviour 碰撞消息发送到实现 OnCollision 方法的相应脚本。默认情况下会启用此属性。 |
|
| Contact Pairs Mode | 选择要使用的接触对生成类型。 | |
| Default Contact Pairs | 接收来自除运动/运动和运动/静态接触对之外的所有接触对的碰撞和触发事件。 | |
| Enable Kinematic Kinematic Pairs | 接收来自运动/运动接触对的碰撞和触发事件。 | |
| Enable Kinematic Static Pairs | 接收来自运动/静态接触对的碰撞和触发事件。 | |
| Enable All Contact Pairs | 接收来自所有接触对的碰撞和触发事件。 | |
| Broadphase Type | 选择要在物理模拟中使用的粗略阶段算法。请参阅关于 PhysX SDK 和刚体碰撞的 NVIDIA 文档。 | |
| Sweep and Prune Broadphase | 使用“扫掠修剪”粗筛阶段碰撞方法(即沿单个轴排序对象以避免必须检查相距很远的对)。 | |
| Multibox Pruning Broadphase | 多盒修剪使用网格,每个网格单元格执行扫掠修剪。这通常有助于提高性能,例如在平坦世界中有大量游戏对象时。 | |
| Automatic Box Pruning | 该算法与多盒修剪 (Multibox Pruning) 的算法相似,不同之处在于该算法还可以自动计算世界边界和细分数量。该算法将维护一组网格单元格,并使用常规的“扫掠修剪”方法来计算可能重叠的碰撞体对。该算法通常适用于大型场景,在这样的场景中单个“扫掠修剪”会产生很多额外的误报。 | |
| World Bounds | 使用多盒修剪粗略阶段 (Multibox Pruning Broadphase) 算法时,定义包围世界的 2D 网格以防止相距遥远的对象相互影响。 仅在粗略阶段类型 (Broadphase Type) 设置为多盒修剪粗略阶段 (Multibox Pruning Broadphase) 时使用此选项。 |
|
| World Subdivisions | 2D 网格算法中沿 x 和 z 轴的单元格数。 仅在粗略阶段类型 (Broadphase Type) 设置为多盒修剪粗略阶段 (Multibox Pruning Broadphase) 时使用此选项。 |
|
| Friction Type | 选择用于模拟的摩擦力算法。 | |
| Patch Friction Type | 一种基本的强大摩擦力算法,通常可以在较低的解算器迭代次数下产生最稳定的结果。此方法为每对触摸对象仅使用最多四个标量解算器约束。 | |
| One Directional Friction Type | 库仑摩擦力模型的简化版,其中将给定接触点的摩擦力施加在接触法线的交替切线方向上。这需要比面片摩擦更多的解算器迭代,但不如双向模型准确。要使接合体 (Articulation Body) 使用此摩擦类型,请将解算器类型 (Solver Type) 设置为时间高斯-赛德尔迭代 (Temporal Gauss Seidel)。 | |
| Two Directional Friction Type | 与单向模型一样,但同时在两个切线方向上施加摩擦力。这需要更多的解算器迭代次数,但更精确。对于具有许多接触点的情况,比面片摩擦的成本更高,因为这会应用于每个接触点。要使接合体 (Articulation Body) 使用此摩擦类型,请将解算器类型 (Solver Type) 设置为时间高斯-赛德尔迭代 (Temporal Gauss Seidel)。 | |
| Enable Enhanced Determinism | 无论角色是否存在,场景中的模拟都是一致的(前提是游戏以确定的顺序插入角色)。此模式牺牲了一些性能来确保这种额外的确定性。 | |
| Enable Unified Heightmaps | 启用此选项可以像处理网格碰撞一样处理地形碰撞。 | |
| Improved Patch Friction | 优化面片摩擦,使静态和动态摩擦力不会超过分析结果。默认情况下,此属性处于停用状态。 | |
| Solver Type | 选择要用于模拟的 PhysX 解算器。 | |
| Projected Gauss Seidel | 默认 PhysX 解算器。 | |
| Temporal Gauss Seidel | 该解算器提供更好的收敛性和更好的高质量比处理方式,在校正穿透时可以最大限度减小引入的能量,并可提高关节抗过度拉伸的能力。使用默认解算器在模拟过程中遇到一些不稳定的行为时,使用这种解算器通常会有帮助。 | |
| Default Max Angular Speed | 设置所有动态刚体游戏对象的项目范围默认最大角速度(以弧度为单位)。默认值为 50。 |
|
| Scratch Buffer Chunk Count | 要分配给物理系统用于临时分配的 16KB 内存块数。默认值为 4,其可提供 64KB 缓冲区。 | |
| Fast Motion Threshold | 基于扫掠的 CCD 算法用于确定快速移动的主体是否在此帧中移动的线性运动阈值。此值必须大于零 (0)。默认值为无穷大,由值 3.402823e+38 表示。 |
|
布料 (Cloth) 选项卡中的设置仅适用于布料物理组件。
| 属性 | 功能 |
|---|---|
| Cloth Gravity | 设置布料 (Cloth) 组件在每个轴上的重力值。默认情况下,X 设置为 0,Y 设置为 -9.81,Z 设置为 0。 |
| Enable Cloth Inter-Collision | 允许布料粒子相互碰撞。请参阅布料:自碰撞和互碰撞以了解详细信息。 |
| Distance | 定义每个互碰撞的布料粒子的包裹球体的直径(采用世界单位)。Unity 确保这些球体在模拟过程中不会重叠。距离应小于配置中的两个粒子之间的最小距离。如果距离较大,则布料碰撞可能违反距离约束并导致抖动。默认情况下,此设置为 0.1。 |
| Stiffness | 定义当相互碰撞的布料粒子的接近程度比距离 (Distance) 值小时,这些粒子之间的分离力的强度。该值是 PhysX 乘以分离力的系数;布料解算器随后根据提供的值计算刚度。默认情况下,此设置为 0.2。 |
PhysicsManager