Version: Unity 6.0 (6000.0)
语言 : 中文
碰撞简介
碰撞体形状

碰撞体类型简介

碰撞体的类型决定了碰撞体与其他碰撞体进行交互的方式,这取决于其游戏对象的碰撞体和物理体组件的配置。

Unity 文档提到了以下碰撞体类型:

  • 静态碰撞体:游戏对象具有碰撞体,但没有物理体(刚体或关节体)。
  • 物理体碰撞体:游戏对象具有碰撞体和物理体。
    • 动态碰撞体:游戏对象的物理体是动态的(即已禁用 Is Kinematic)。
    • 运动刚体碰撞体:游戏对象的刚体是运动学类型的(即启用了 Is Kinematic)。关节体不能是运动学类型的。

有关不同类型碰撞体如何交互的详细信息,请参阅不同类型碰撞体之间的交互

静态碰撞体

静态碰撞体是没有关联刚体或关节体(即关联游戏对象上没有刚体或关节体)的碰撞体,因此不会对模拟物理力做出反应。其他碰撞体可与静态碰撞体发生碰撞,但静态碰撞体不会因碰撞而发生移动。

静态碰撞体用于始终保持在同一位置并且从不会移动的几何体(例如,地板、墙壁和场景的其他静止元素)。

运行时移动静态碰撞体的唯一方法是借助变换组件。但是,在大多数情况下,不应这样做。物理系统在计算物理更新时,无法立即考虑由变换引导的移动,如果通过变换组件来移动静态碰撞体,可能会看到意外的副作用。相反,应仅将静态碰撞体用于运行时不会移动的碰撞体几何体。如果希望碰撞体不对物理力做出响应,但可以在运行时以物理系统可以检测和计算的方式进行移动,请考虑使用运动物理体碰撞体。

由于静态碰撞体并非设计用于移动或临时的碰撞体,因此当静态碰撞体移动或消失时,物理系统不会重新计算或唤醒物理体以做出响应。例如:如果将汽车(具有物理体和车轮碰撞体)放置在静态碰撞体上,车轮碰撞体会检测到碰撞体并停靠在其上。如有几帧后仍没有输入,汽车的物理体和碰撞体会进入睡眠状态。如果静态碰撞体移动,汽车可能会随之移动或跌落。但是,物理系统不会唤醒汽车的物理体来响应静态碰撞体的运动,因此汽车会停留在原地。

物理体碰撞体

物理体碰撞体是与物理体(刚体或关节体)位于同一游戏对象上的碰撞体。物理体碰撞体包含在物理计算中,但根据其是动态还是运动碰撞体(即是否禁用或启用 Is Kinematic),物理体碰撞体的行为会有所差异。

刚体可以是动态或运动刚体。关节体只能是动态的;不能是运动学类型的。

动态碰撞体

动态碰撞体是与动态物理体位于同一游戏对象上的碰撞体。动态碰撞体会对模拟物理力做出响应。它们可以与其他对象(包括静态碰撞体)发生碰撞,其他碰撞体可以移动它们或对其施力。

动态碰撞体用于希望物理系统将其包含在物理计算中并通过物理力移动的任何游戏对象。

物理体碰撞体默认是动态的。

运动碰撞体

运动碰撞体是与运动刚体位于同一游戏对象上的碰撞体。关节体不能是运动学类型的。

与静态碰撞体一样,运动碰撞体不会对模拟物理力做出响应。其他碰撞体可以与运动碰撞体发生碰撞,但运动碰撞体因碰撞而移动。

与静态碰撞体不同,物理系统可以将运动碰撞体纳入物理计算中。运动碰撞体可以:

  • 在其他碰撞体发生接触时将其从睡眠状态中唤醒
  • 充当触发碰撞体,并接收来自其他碰撞体的触发事件
  • 摩擦力施加到其他碰撞体上

运动碰撞体用于大多数时间像静态碰撞体但希望其有时也能移动的碰撞体(例如,一扇通常作为不可移动的物理障碍但可以在必要时打开的滑动门)。

运行时,可根据需要使用 Rigidbody.isKinematic 通过脚本来对刚体碰撞体进行动态和运动切换。对于那些并不总是需要处于动态状态的碰撞体,这可能是管理其性能的有用方法。例如,切换碰撞体类型的一个常见用例是创建“布偶”效果。在这种效果中,角色通常在动画下移动,但在强烈碰撞时会以物理方式做出响应。角色的四肢可默认为运动学类型,并通过动画移动,但特定的碰撞体可以触发刚体以禁用 IsKinematic,这样四肢会是动态的,且其行为类似物理对象。

碰撞体相互作用

不同类型(静态、运动和动态)的碰撞体之间根据每对碰撞体的配置会进行不同的交互。有关更多详细信息,请参阅碰撞体交互

碰撞简介
碰撞体形状