[UE4] 制作独立窗口插件

本文档记录了在UE4中创建独立窗口插件的过程,包括在C++中修改代码以在编辑器菜单添加按钮,创建带有功能的Tab,以及点击按钮调用函数。通过FToolMenuOwnerScoped、FGlobalTabmanager等Slate语句实现菜单与Tab的创建,并展示了如何在Tab中添加按钮及响应点击事件。
摘要由CSDN通过智能技术生成

内容自学自B站AV244462117,P6

该文仅为自学记录,并非教程,可能存在谬误

系统环境:WIN10, UE4(引擎版本4.27.1),Visual Studio 2022 Community


1. 创建新插件

在UE4编辑器菜单中创建独立窗口插件 


2. c++ 代码修改

来到VS文件,路径为:

D:\UE4\Project\PluginsSlate(你的工程名)\Test01(你的项目名)\Plugins\InDepWindow

(你的插件名)\Source\InDepWindow(你的插件名)\Private\ InDepWindow.cpp

首先系统自动生成好了两个创建编辑器按钮的函数,该函数为“新方法”所创建。

创建编辑器按钮的函数写在RegisterMenus下,具体语句为:

FToolMenuOwnerScoped OwnerScoped(this);
	{
		UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Window");
		{
			FToolMenuSection& Section = Menu->FindOrAddSection("WindowLayout");
			Section.AddMenuEntryWithCommandList(FInDepWindowCommands::Get().
            OpenPluginWindow, PluginCommands);
		}
	}

"LevelEditor.MainMenu.Window"意为在编辑器中的主菜单中的窗口选项卡下添加按钮,"WindowLayout"意为具体在窗口选项卡下拉菜单的窗口布局段后方添加按钮。除此之外,还可以在编辑器几乎任意的地方添加按钮,只需修改上述两个字段即可。

2.1 头文件与预先名称声明

首先添加头文件:

#include "Widgets/Input/SSlider.h"

该步主要为了后续添加带有滑块的Tab,若不需要此功能则无需进行头文件声明。

进行Tab的名称定义:

static const FName MyTab01("MyTab01");
static const FName MyTab02("MyTab02");

这里声明了两个自定义标签页的名称。

2.2 Tab的样式与功能 

该部分在StartupModule中进行编写,所用的为Slate语句,虽然其也是C++语句,但在观感上与我们所常见的C++语句不太像,我们需要熟悉这种表达方式。下面是在呼出的独立窗口中创建一个新的Tab,且Tab中有一个按钮的语句:

FGlobalTabmanager::Get()->RegisterNomadTabSpawner(MyTab01,
    FOnSpawnTab::CreateLambda([](const FSpawnTabArgs& SpawnTabArgs) {
	FText WidgetText = LOCTEXT("WindowMyTab1Text", "MyButton");
	return SNew(SDockTab)
		.TabRole(ETabRole::NomadTab)
		[
			// Put your tab content here!
			SNew(SButton)
			.HAlign(HAlign_Fill)
			.VAlign(VAlign_Fill)
			.OnClicked_Lambda(
				[]() {
					UE_LOG(LogTemp, Warning, TEXT("Successfully invoked!"));
					return FReply::Handled();
				}
		)
		[
			SNew(STextBlock)
			.Text(WidgetText)
		]
		];
	}))
	.SetDisplayName(LOCTEXT("MyTab0TabTitle", "MyTab0"))
	.SetMenuType(ETabSpawnerMenuType::Enabled);

第一行中MyTab01为所面对的Tab对象,Slate语句对该Tab的样式进行了约束,具体创建了一个按钮,该按钮竖直和水平都充满Tab,且在点击按钮后,我们可以在UE4输出日志中看见打印的语句“Successfully invoked”以提醒我们按钮的功能编译成功。

 2.3 点击按钮调用函数语句

如果仅是进行了2.1~2.2步骤,写好了我们的功能,但没有把“点击这个按钮做的事情”和“我们要实现的功能”之间创建因果关系,那么我们之前所做的工作都是徒劳的。

具体需要在PluginButtonClicke下进行声明:

FGlobalTabmanager::Get()->TryInvokeTab(MyTab01);

 下图为功能实现后的按钮样式: 

通过窗口 → 开发者工具 → 输出日志来打开输出日志窗口,点击按钮进行观察:

出现预定的语句(点击了三次所以出现三次)则功能成功实现


*注意* 

1. 所观看的up主教程中还有进度条样式的Tab,这里没有给出描述。

2. 目前所进行的尝试中,C++代码编译后在UE4编辑器中不会立刻显现所做出的更改,并且也无法通过刷新uproject的vs文件来实现更改,只能通过关闭UE4再重新打开项目才能看见更改。

3. 先通过编辑器工具栏插件创建一个在工具栏Settings后的按钮后,再使用独立窗口插件在相同位置创建按钮则不会成功,换做其他地方则可以成功,不知缘于何。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值