ApplyRadialDamage 没有造成伤害 解决过程
在代码中正确应用了UGameplayStatics::ApplyRadialDamage 和 AActor::TakeDamage,但是并没有实现预期的功能
调试时发现 TakeDamage 并没有执行
那么我从ApplyRadialDamage的执行中查找原因
ApplyRadialDamage实际上是对ApplyRadialDamageWithFallOff的封装
下一段逻辑是寻找范围内可碰撞的物体,经过一定条件的筛选后,加入到OverlapComponentMap,这个Map中的物体才会收到DamageEvent
在范围的物体,BP_HaliZombie理应是收到事件的物体,但是在筛选后它是空的
筛选条件与 ComponentIsDamageableFrom 函数有关,进入函数调试
函数在执行UE_LOG后退出,意思是对 目标物体的伤害事件被其他东西阻挡了
在我的游戏中,目标物体被榴弹的SphereComp阻挡,结合上图代码来分析,我们可以知道,目标物体是否被阻挡是根据 LineTraceSingleByChannel 函数的返回值,可以发现TraceChannel是参数之一,且当前值为
所以该函数当前是通过 Visibility Channel 去判断目标物体是否被阻挡,也就是说 SphereComp 的 TraceResponses 中勾选了 Visibility,造成了目标物体被阻挡
所以只需关闭相应设置,目标物体应该就可以正常接收到DamageEvent了
将Visibility设置为Ignore后