虚幻中的碰撞响应

总的来看,虚幻中的碰撞响应可以分为两大类,即Object ResponseTrace Response。其中Object Response就是我们常见的世界中物体与物体的之间的碰撞,而Trace Response则是指与LineTrace这类射线相应, 也就是决定该物体会不会响应场景中的射线检测。更进一步用官方文档的话来总结的话就是:

碰撞响应追踪响应构成了虚幻引擎5在运行时处理碰撞和光线投射的基础。能够碰撞的每个对象都有对象类型和一系列响应,用来定义它与所有其他对象类型交互的方式。当碰撞或重叠事件发生时,涉及的两个(或全部)对象都会发出或受到阻挡、重叠或忽略的作用。

追踪响应 的原理基本相同,唯一的区别是追踪(光线投射)本身可以定义为一种追踪响应类型,因此Actor可以根据追踪响应阻挡或忽略。

其中Object Response负责的交互类型如下:

  • WorldStatic: 应用于不移动的任意Actor。
  • WorldDynamic: WorldDynamic用于受到动画或代码的影响而移动的Actor类型。
  • Pawn:任何由玩家控制的实体的类型都应为Pawn。
  • PhysicsBody:由于物理模拟而移动的任意Actor。
  • Vehicle:载具的默认类型。
  • Destructible:可破坏物网格体的默认类型。

Trace Response负责的话就只有VisibilityCamera

在了解两大Response的具体负责类型之后,还要明白所谓的碰撞开启并不是说开关电灯那样,只有“亮”“暗”两种状态。事实上我们伟大的虚幻引擎一共准备了4种状态。分别为

  • No Collision: 在物理引擎中此形体将不具有任何表示。不可用于空间查询(光线投射、Sweep、重叠)或模拟(刚体、约束)。此设置可提供最佳性能,尤其是对于移动对象。
  • Query Only: 只能用来进行物理查询,例如是不是被射线击中了之类的,但是无法对物体进行物理模拟,比如我对这个物体施加了力,但是实际上并不参与物理计算。
  • Physics Only:基本来说是上面的反方向,只进行物理上的模拟,不参与射线检测类的空间查询
  • Collision Enabled:我全都要

在知道了碰撞开启的4种状态以及各种相应后,我们还可以对具体的某种相应类型做出特殊化,例如虚幻中Pown类的默认Response如下图所示:

这里的Ignore指的是完全不产生碰撞事件,Overlap是产生重叠事件(如果你开启了的话),但是不会互相阻止对方通过,Block那自然就是直接把对方隔开,这里指的一提的是,当我们有A和B两个物体时,只有A block B 并且 B block A,两个物体才会发生Block。下图分别是OverlapBlock的具体图例(可能图会加载的有些慢)。

Overlap!!
Block!!

引用

虚幻引擎中的碰撞 | 虚幻引擎5.0文档 (unrealengine.com)

虚幻引擎中的碰撞响应参考 | 虚幻引擎5.1文档 (unrealengine.com)