UE4碰撞检测和射线检测

/ 2

Trace Channel

射线检测通道,默认有 VisibilityCamera 两个通道。

可以简单理解为射线的类型/通道,也就是表示这射线是啥。

我们可以自己添加一个 Trace ChannelTrajectory 表示子弹弹道。在调用 LineTraceByChannel 函数进行射线检测的时候,把 Trace Channel 设置为 Trajectory,在敌人的可碰撞组件的碰撞设置里设置对 Trajectory 的响应方式为 Block。这样我们发射的弹道射线检测,就可以碰撞到敌人了。

射线检测和碰撞检测的响应方式都只有三种 IgnoreOverlapBlock,分别表示忽略、重叠和阻挡。

忽略就是没任何响应,无视这个检测。

重叠就是可穿过,会触发重叠事件,然后继续检测后面的组件。

阻挡就是不能穿过,会触发阻挡事件。

命名容易产生的误区

VisibilityCamera 只是 UE4 默认的两个 Trace Channel 的命名而已,跟可见性和摄像机是没有关系的,别被名字迷惑。

我们也可以自己在 项目设置 - 碰撞 里添加自己的 Trace Channel

Object Channel

碰撞检测通道,默认有 WorldStaticWorldDynamicPawnPhysicsBodyVehicleDestructible 六个通道。

组件可以设置自己的 Object Channel,并且可以定义对所有 Object Channel 的组件如何响应。Object Channel 使用碰撞设置里的 Object Type 属性进行设置。

也就是两个可碰撞组件都要设置好他们的 Object ChannelObject Response,才可以产生正确的碰撞事件。

注意

假如当前组件的 Object ChannelPlayer,另一个组件的 Object ChannelBullet

我们需要在当前组件里设置对 Bullet 的响应为 Block,在另一个组件里设置对 Player 的响应也为 Block,这两个组件碰撞时才能产生阻挡效果。

图示

在蓝图中,我们将 Collision Presets 设置为 Custom... 才能自定义下面的设置。这个设置其实只是 UE4 为我们提供的一些射线检测和碰撞检测的预设配置而已。

Object Type 可以理解为定义当前组件作为可碰撞体的分类名字,他只对 Object Responses 有关系,和 Trace Responses 是没关系的。

Trace Responses 对应的是发出射线检测的时候设置的 Trace Channel

碰撞的继承

碰撞冲突

如果身上的枪和自己的碰撞响应都是 Block,就会出现冲突。导致出现莫名其妙的问题,比如你移动的时候就判定你碰到障碍物了(其实是身上的枪),就会一直往一个方向移动。