【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的蓝图类:

【UE4】全局Widget_第1张图片

【UE4】全局Widget_第2张图片

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

gif过大自行下载查看

你可能感兴趣的:(UE4,知识记录,ue4)