实际开发中遇到题目所述的问题,对解决方法进行记录
文章目录
- 问题描述
- 解决方案
问题描述
博主在开发FPS游戏过程中,使用 LineTraceSingleByChannel 进行可视性检测,即其参数 Channel = Visiblity,对于命中的第一个物体应用相应的处理流程,比如命中一个墙体,会在墙体上生成一个贴花,而命中一个敌人的人物,则造成伤害、播放相应的收击动画、产生粒子特效等反馈。
对于下面一个墙体的Static Mesh Actor,其并不会对 LineTraceSingleByChannel 的可视性检测进行阻挡,可以看到该Static Mesh有简单的立方体碰撞且碰撞预设(Collision Presets)被设置为BlockAll。

而我们射击后发现并没有阻挡该可视性检测射线,且敌人AI的视力感知也不会被该Static Mesh Actor影响(就是躲在墙后敌人也能发现我们)。

解决方案
在Static Mesh里更改Collision Trace Behavior,默认为 Project Default,这里改为 Use Simple Collision As Complex,表示对于所有的场景查询和碰撞检测使用简单的形状。

这里使用 Project Default 表示使用工程设置中的默认值,下图可以看到当前工程的默认设置为 Simple And Complex,表示对于常规的场景查询和碰撞检测使用简单形状,对于复杂的场景查询使用复杂形状,这里如果我们将其改为 Use Simple Collision As Complex 也是可以正常阻挡的。But Why?
