【UE4】全局Widget

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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();
};
1
2
3
4
5
6
7
8
9
10
#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的蓝图类:

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


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!