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

UE4 C++调用碰撞时游戏崩溃问题求助

UE4 C++碰撞逻辑崩溃与绑定失效问题解决

崩溃原因排查与修复

崩溃触发在SphereComp->OnComponentBeginOverlap.AddDynamic(this, &AHIT1::OnActorOverlap);,核心原因是SphereComp为空指针导致的非法内存访问。

紧急修复(避免崩溃)

在BeginPlay中先校验组件有效性,再执行委托绑定:

void AHIT1::BeginPlay()
{
    Super::BeginPlay(); 

    if (IsValid(SphereComp))
    {
        SphereComp->OnComponentBeginOverlap.AddDynamic(this, &AHIT1::OnActorOverlap);
    }
}

SphereComp为空的常见诱因

  • 若你基于AHIT1创建了蓝图子类,检查蓝图中是否删除或替换了SphereComp组件——蓝图会覆盖父类的组件初始化逻辑,手动移除组件会导致代码中指针为空。
  • 确认构造函数中CreateDefaultSubobject的执行逻辑未被子类构造代码覆盖。

构造函数绑定失效的原因

构造函数属于对象初始化的早期阶段,此时组件的碰撞系统尚未完全就绪,委托绑定会被后续的组件初始化流程覆盖,最终导致绑定失效。UE官方推荐的委托绑定时机是BeginPlay或PostInitializeComponents(后者适用于需要更早绑定的场景)。

额外排查点

  1. 开启重叠事件生成
    碰撞组件默认可能未开启重叠事件检测,可通过代码手动开启:

    // 在构造函数中添加
    SphereComp->SetGenerateOverlapEvents(true);
    

    也可在编辑器项目设置->碰撞中,确认"Projectile"碰撞预设的Generate Overlap Events选项已勾选。

  2. 碰撞层交互校验
    检查SphereComp的碰撞层与目标Actor的碰撞层是否在碰撞预设中开启了重叠检测,若两层无交互规则,重叠事件不会触发。

  3. 函数签名一致性
    确保委托函数的参数类型、顺序、const/引用修饰完全匹配UE的FComponentBeginOverlapSignature委托签名(你的现有代码签名是正确的,后续修改需注意)。

内容的提问来源于stack exchange,提问作者Роман Дворниченко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:05:10