赞
踩
大家都知道蓝图有QuitGame节点,可以退出游戏;SetFullScreenMode可以全屏、窗口化全屏和窗口化。但是为什么没有最小化啊。
在Build.cs添加两个模块,分别是Slate和SlateCore
#include "Engine/GameEngine.h" #include "Widgets/SWindow.h"
我测试之后发现只能在独立进程游戏情况下有效,而Play in Edit是无效的,如有知道为何的大佬,请赐教。经过断点测试发现可以通过查阅viewport的类型来控制,所以现在已经可以在PIE下实现效果了
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 = "退出") };
通过虚幻引擎自带的工具可以查看功能写法,然后找到源码部分借鉴学习
工具打开可以点击选择可测试命中控件,放到哪个地方都可以查阅相应的源码地址,非常好用
虚幻yyds~
好了,本次分享结束了,如果对您有起到帮助,麻烦点个赞吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。