UE5窗口设置(最小化、最大化、关闭和还原)(附插件下载链接)

1、需求

        大家都知道蓝图有QuitGame节点,可以退出游戏;SetFullScreenMode可以全屏、窗口化全屏和窗口化。但是为什么没有最小化啊。

2、注意事项和准备工作

2.1、模块添加

在Build.cs添加两个模块,分别是SlateSlateCore

2.2、头文件

#include "Engine/GameEngine.h"
#include "Widgets/SWindow.h"

2.3、注意事项

我测试之后发现只能在独立进程游戏情况下有效,而Play in Edit是无效的,如有知道为何的大佬,请赐教。

经过断点测试发现可以通过查阅viewport的类型来控制,所以现在已经可以在PIE下实现效果了

3、代码

3.1、声明

因为我是写在继承自蓝图函数库的类,所以加上了static为全局静态函数,各位可根据自己的需求选择

	UFUNCTION(BlueprintCallable,meta=(DisplayName="窗口化操作",WorldContext="WorldContextObject"),Category="StudyBF|Window|Notify")
		static void GameWindow(UObject* WorldContextObject,EWindowNotify WindowNotify);

3.2、定义


void UMyBF::GameWindow(UObject* WorldContextObject,EWindowNotify WindowNotify)
{
TIndirectArray<FWorldContext> arr1 = GEngine->GetWorldContexts();
	for(int i=0;i<arr1.Num();i++)
	{
		if(arr1[i].WorldType == EWorldType::PIE || arr1[i].WorldType == EWorldType::Game)
		{
			const TWeakPtr<SWindow> GameWindowWeak = arr1[i].GameViewport->GetWindow();
			TSharedPtr<SWindow> GameWindow = GameWindowWeak.Pin();
			if(GameWindow)
			{
				switch (WindowNotify)
				{
				case EWindowNotify::Minimize :
					GameWindow->Minimize();
					break;
				case EWindowNotify::Maximize :
					GameWindow->IsWindowMaximized() ? GameWindow->Restore() : GameWindow->Maximize(); 
					break;
		
				case EWindowNotify::Exit :
					UKismetSystemLibrary::QuitGame(WorldContextObject,nullptr,EQuitPreference::Quit,false);
					break;
				}
				
			}
			break;
		}
	}			
}

3.3、枚举

EWindowNotify是我自己写的一个枚举,可以通过枚举进行不同的操作

UENUM(BlueprintType)
enum class EWindowNotify : uint8
{
	Minimize UMETA(DisplayName = "最小化"),
	Maximize UMETA(DisplayName = "最大化/还原"),
	Exit UMETA(DisplayName = "退出")
};

4、效果演示

4.1、蓝图节点

4.2、效果动图

5、学习方式

通过虚幻引擎自带的工具可以查看功能写法,然后找到源码部分借鉴学习

工具打开可以点击选择可测试命中控件,放到哪个地方都可以查阅相应的源码地址,非常好用

虚幻yyds~

6、结语

好了,本次分享结束了,如果对您有起到帮助,麻烦点个赞吧!

7、插件下载

我已经打包成插件了,测试了下也没问题

https://pan.baidu.com/s/1cIDwJbooRzvpdRUwuOJwmQ?pwd=t976 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值