You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE4中如何阻止AZombieBasic通过ApplyDamage伤害同类型或自身Actor

问题解决方案

核心问题原因

  • 原有逻辑缺少自身、同类僵尸的排除判断
  • 仅通过OtherActor == mainCharacter做判断存在漏洞:如果mainCharacter指针未初始化/赋值失败,判断永远不生效,没有伤害输出;如果原有全局伤害代码未删除,会跳过你的判断直接执行,导致所有Actor都受伤害
  • 未做类型安全校验,无法过滤非玩家、非僵尸的其他Actor

修复后的实现代码

void AZombieBasic::DamageOnOverlap(AActor* HitActor, AActor* OtherActor)
{
    // 1. 排除自身伤害
    if (OtherActor == this)
    {
        return;
    }
    // 2. 排除同类僵尸互相伤害
    if (Cast<AZombieBasic>(OtherActor) != nullptr)
    {
        return;
    }
    // 3. 校验目标是玩家且指针有效,再执行伤害
    AMainCharacter* HitPlayer = Cast<AMainCharacter>(OtherActor);
    if (HitPlayer != nullptr && mainCharacter != nullptr && HitPlayer == mainCharacter)
    {
        UGameplayStatics::ApplyDamage(OtherActor, 20.f, GetWorld()->GetFirstPlayerController(), this, UDamageType::StaticClass());
    }
}

额外注意事项

  • 确保mainCharacter指针在BeginPlay阶段完成赋值,示例赋值逻辑:
void AZombieBasic::BeginPlay()
{
    Super::BeginPlay();
    mainCharacter = Cast<AMainCharacter>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0));
}
  • 确认重叠事件的绑定逻辑正确,没有重复绑定多份伤害回调
  • 如果需要支持伤害其他非玩家、非僵尸的Actor,可以在排除前两层校验后自定义对应逻辑

内容的提问来源于stack exchange,提问作者George_H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:54:03