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 @   当麻  阅读(683)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示