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后
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)