【UE4】全局Widget

由于UE4在默认情况下会OpenLevel会将当前Level创建的Widget从ViewportClient中移除,所以默认的UserWidget会随着切换关切而消失。

gif过大自行下载查看

有的时候我们可能需要使用一个全局的按钮什么的,所以就需要Widget不随切换关切而从ViewprotClient中移除,而是在我们想要移除的时候才移除,做一个全局的Widget其实也很简单,我只需要稍稍的重写一下UserWidget就好了。

首先创建一个自己的UserWidget子类,然后重写OnLevelRemovedFromWorld函数:

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "GlobalWidget.generated.h"

UCLASS()
class MYPROJECT_API UGlobalWidget : public UUserWidget
{
	GENERATED_BODY()
public:
    virtual void OnLevelRemovedFromWorld(ULevel* InLevel, UWorld* InWorld) override;
    UFUNCTION(BlueprintCallable,Category="GloablWidget")
    void RemoveGlobalWidget();
};
#include "GlobalWidget/GlobalWidget.h"

void UGlobalWidget::OnLevelRemovedFromWorld(ULevel* InLevel, UWorld* InWorld)
{
}

void UGlobalWidget::RemoveGlobalWidget()
{
    RemoveFromParent();
}
  • OnLevelRemovedFromWorld函数就是UserWidget往FWorldDelegates::LevelRemovedFromWorld代理中添加的函数,FWorldDelegates::LevelRemovedFromWorld代理会在Level从World中移除时调用;
  • RemoveGlobalWidget是自定义的函数,用于触发从ViewportClient中移除Widget。

然后创建一个GlobalWidget的蓝图类:

在这里插入图片描述

在这里插入图片描述

然后我们就可看一下效果了:

gif过大自行下载查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值