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后

 

posted @ 2020-10-26 16:05  当麻  阅读(603)  评论(0编辑  收藏  举报