在 Unity 中,当两个配置为碰撞的游戏对象占用相同的物理空间时,就会发生碰撞。碰撞是大多数游戏以及许多交互式应用程序和模拟器的基础部分。
为了处理游戏对象之间的碰撞,Unity 使用了碰撞体。碰撞体是一个 Unity 组件,可定义用于物理碰撞的__ GameObject__Unity 场景中的基础对象,可以表示角色、道具、风景、摄像机、路径点等。GameObject 的功能由所附的组件决定。更多信息
See in Glossary 的形状。碰撞体是不可见的,其形状无需与游戏对象的网格完全相同。
有关如何将组件添加到游戏对象的指南,请参阅使用组件。
每个 3D 碰撞体都有一个 2D 等效对象。在 Unity 中,2D 和 3D 物理组件在不同的物理模拟系统上运行。有关 2D 物理碰撞体的指南,请参阅 2D 碰撞体。
碰撞体的类型基于其游戏对象的碰撞体和刚体组件的配置。此配置决定了碰撞体的行为方式以及与其他碰撞体的交互方式。
还有一个碰撞体子类,称为触发碰撞体。触发碰撞体不会与其他碰撞体发生物理碰撞;相反,其他碰撞体穿过它们时,Unity 会调用函数。
触发碰撞体不会导致碰撞。相反,它们会检测穿过它们的其他碰撞体,并调用可用于发起事件的函数(请参阅使用碰撞触发其他事件)。
如要将碰撞体转换为触发碰撞体,请在碰撞体 (Collider) 组件上启用 Is Trigger 属性。触发碰撞体不会与其他碰撞体发生碰撞;相反,其他碰撞体会穿过它。
要使触发碰撞体正常工作,至少有一个碰撞所涉游戏对象具有刚体。触发碰撞体可以是任何类型的碰撞体(静态碰撞体或刚体),但在大多数情况下,最好将触发碰撞体设置为静态碰撞体,并将刚体添加到穿过触发器的游戏对象。如果有多个 GameObject 穿过触发器,则每个碰撞对中至少有一个 GameObject 上必须具有刚体。
触发器可以是任何碰撞体形状(请参阅碰撞体形状),它们可以是可见的或不可见的。如要使触发器不可见,请将碰撞体添加到空的游戏对象。只有当其允许其他游戏对象以可见方式穿过时,才向可见游戏对象添加触发器。
在游戏玩法与物理模拟中,可能需要对触发器进行参数调整,以使玩家的交互体验更加符合直觉。例如,可以尝试使触发碰撞体略大于其关联的可见游戏对象,使其具有更宽的半径。
有关不同类型的碰撞体在碰撞时如何相互作用的信息,请参阅各类型碰撞体之间的相互作用。
碰撞体组件具有不同的形状配置。主要有三种碰撞体形状:
原始碰撞体是内置的简单形状,可以附加到 GameObject 并缩放到与其大致相同的大小和形状。还可以将多个原始碰撞体形状组合起来创建复合碰撞体。网格碰撞体能与游戏对象的网格形状完全匹配。对于复杂形状而言,它们比原始碰撞体更准确,但需要更多的计算资源。车轮碰撞体是基于射线投射的碰撞体,专门用于具有物理模拟车轮的游戏内物品(例如车辆)。它们具有内置的车轮物理组件和摩擦力控件。
您可以控制碰撞体表面的摩擦力和弹力。当两个碰撞体相遇时,物理系统会使用每个表面的属性来计算它们之间的摩擦和弹力。
有关更多信息,请参阅碰撞体表面。