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

组件结束重叠时移除指定Widget的实现方案

解决方案:仅销毁碰撞触发的指定Widget

核心思路是持有目标Widget的实例引用,在离开碰撞区域时直接对该实例执行销毁操作,而非批量移除所有Widget。以下分蓝图和C++两种实现方式:

蓝图实现步骤

  • 在包含Box Collision的Actor中,创建一个User Widget类型的变量(命名如TargetWidget),用于存储后续创建的目标Widget实例。
  • 进入碰撞触发事件(OnComponentBeginOverlap):
    1. 创建目标Widget实例;
    2. 将返回的Widget实例赋值给TargetWidget变量;
    3. 调用Add to Viewport显示Widget。
  • 离开碰撞触发事件(OnComponentEndOverlap):
    1. 使用Is Valid节点检查TargetWidget是否有效;
    2. 若有效,先调用Remove from Parent将Widget从视口移除;
    3. 再调用Destroy Widget(UE4中可使用Destroy Actor)销毁该实例;
    4. 最后将TargetWidget设为null,避免后续引用无效实例。

C++实现步骤

  • 在Actor类中声明持有Widget的成员变量:
    UPROPERTY()
    UUserWidget* TargetWidget;
    
  • 绑定并实现OnComponentBeginOverlap回调:
    void AYourBoxActor::OnBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
    {
        // 替换为你的Widget类路径
        if (UClass* WidgetClass = LoadClass<UUserWidget>(nullptr, TEXT("/Game/Widgets/WBP_TargetWidget.WBP_TargetWidget_C")))
        {
            TargetWidget = CreateWidget<UUserWidget>(GetWorld(), WidgetClass);
            if (TargetWidget)
            {
                TargetWidget->AddToViewport();
            }
        }
    }
    
  • 绑定并实现OnComponentEndOverlap回调:
    void AYourBoxActor::OnBoxEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
    {
        if (TargetWidget && TargetWidget->IsValidLowLevel())
        {
            TargetWidget->RemoveFromParent();
            TargetWidget->DestroyWidget();
            TargetWidget = nullptr;
        }
    }
    

注意事项

  • 确保碰撞事件绑定正确:蓝图直接连线即可;C++需在BeginPlay中调用BoxCollision->OnComponentBeginOverlap.AddDynamic(this, &AYourBoxActor::OnBoxBeginOverlap);完成绑定;
  • 若存在多玩家或多重叠场景,可将变量改为数组类型,记录所有触发的Widget实例后逐一处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:33:17