实际开发中遇到题目所述的问题,对解决方法进行记录
文章目录
- 问题描述
- 解决方案
问题描述
博主在开发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?