Unreal中的碰撞响应
虚幻中的碰撞响应
总的来看,虚幻中的碰撞响应可以分为两大类,即Object Response和Trace Response。其中Object Response就是我们常见的世界中物体与物体的之间的碰撞,而Trace Response则是指与LineTrace这类射线相应, 也就是决定该物体会不会响应场景中的射线检测。更进一步用官方文档的话来总结的话就是:
碰撞响应和追踪响应构成了虚幻引擎5在运行时处理碰撞和光线投射的基础。能够碰撞的每个对象都有对象类型和一系列响应,用来定义它与所有其他对象类型交互的方式。当碰撞或重叠事件发生时,涉及的两个(或全部)对象都会发出或受到阻挡、重叠或忽略的作用。
追踪响应 的原理基本相同,唯一的区别是追踪(光线投射)本身可以定义为一种追踪响应类型,因此Actor可以根据其追踪响应阻挡或忽略。
其中Object Response负责的交互类型如下:
- WorldStatic: 应用于不移动的任意Actor。
- WorldDynamic: WorldDynamic用于受到动画或代码的影响而移动的Actor类型。
- Pawn:任何由玩家控制的实体的类型都应为Pawn。
- PhysicsBody:由于物理模拟而移动的任意Actor。
- Vehicle:载具的默认类型。
- Destructible:可破坏物网格体的默认类型。
Trace Response负责的话就只有Visibility和Camera。
在了解两大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。下图分别是Overlap与Block的具体图例(可能图会加载的有些慢)。
引用
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment