Trace Channel
射线检测通道,默认有 Visibility
和 Camera
两个通道。
可以简单理解为射线的类型/通道,也就是表示这射线是啥。
我们可以自己添加一个 Trace Channel
为 Trajectory
表示子弹弹道。在调用 LineTraceByChannel
函数进行射线检测的时候,把 Trace Channel
设置为 Trajectory
,在敌人的可碰撞组件的碰撞设置里设置对 Trajectory
的响应方式为 Block
。这样我们发射的弹道射线检测,就可以碰撞到敌人了。
射线检测和碰撞检测的响应方式都只有三种 Ignore
、Overlap
和 Block
,分别表示忽略、重叠和阻挡。
忽略就是没任何响应,无视这个检测。
重叠就是可穿过,会触发重叠事件,然后继续检测后面的组件。
阻挡就是不能穿过,会触发阻挡事件。
命名容易产生的误区
Visibility
和 Camera
只是 UE4 默认的两个 Trace Channel
的命名而已,跟可见性和摄像机是没有关系的,别被名字迷惑。
我们也可以自己在 项目设置 - 碰撞 里添加自己的 Trace Channel
。
Object Channel
碰撞检测通道,默认有 WorldStatic
、WorldDynamic
、Pawn
、PhysicsBody
、Vehicle
、Destructible
六个通道。
组件可以设置自己的 Object Channel
,并且可以定义对所有 Object Channel
的组件如何响应。Object Channel
使用碰撞设置里的 Object Type
属性进行设置。
也就是两个可碰撞组件都要设置好他们的 Object Channel
和 Object Response
,才可以产生正确的碰撞事件。
注意
假如当前组件的 Object Channel
为 Player
,另一个组件的 Object Channel
为 Bullet
。
我们需要在当前组件里设置对 Bullet
的响应为 Block
,在另一个组件里设置对 Player
的响应也为 Block
,这两个组件碰撞时才能产生阻挡效果。
图示
在蓝图中,我们将 Collision Presets
设置为 Custom...
才能自定义下面的设置。这个设置其实只是 UE4 为我们提供的一些射线检测和碰撞检测的预设配置而已。
Object Type
可以理解为定义当前组件作为可碰撞体的分类名字,他只对 Object Responses
有关系,和 Trace Responses
是没关系的。
Trace Responses
对应的是发出射线检测的时候设置的 Trace Channel
。
碰撞的继承
碰撞冲突
如果身上的枪和自己的碰撞响应都是 Block
,就会出现冲突。导致出现莫名其妙的问题,比如你移动的时候就判定你碰到障碍物了(其实是身上的枪),就会一直往一个方向移动。