内容自学自B站AV244462117,P6
该文仅为自学记录,并非教程,可能存在谬误
系统环境:WIN10, UE4(引擎版本4.27.1),Visual Studio 2022 Community
在UE4编辑器菜单中创建独立窗口插件
来到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"意为具体在窗口选项卡下拉菜单的窗口布局段后方添加按钮。除此之外,还可以在编辑器几乎任意的地方添加按钮,只需修改上述两个字段即可。
首先添加头文件:
#include "Widgets/Input/SSlider.h"
该步主要为了后续添加带有滑块的Tab,若不需要此功能则无需进行头文件声明。
进行Tab的名称定义:
static const FName MyTab01("MyTab01");
static const FName MyTab02("MyTab02");
这里声明了两个自定义标签页的名称。
该部分在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.1~2.2步骤,写好了我们的功能,但没有把“点击这个按钮做的事情”和“我们要实现的功能”之间创建因果关系,那么我们之前所做的工作都是徒劳的。
具体需要在PluginButtonClicke下进行声明:
FGlobalTabmanager::Get()->TryInvokeTab(MyTab01);
下图为功能实现后的按钮样式:
通过窗口 → 开发者工具 → 输出日志来打开输出日志窗口,点击按钮进行观察:
出现预定的语句(点击了三次所以出现三次)则功能成功实现
1. 所观看的up主教程中还有进度条样式的Tab,这里没有给出描述。
2. 目前所进行的尝试中,C++代码编译后在UE4编辑器中不会立刻显现所做出的更改,并且也无法通过刷新uproject的vs文件来实现更改,只能通过关闭UE4再重新打开项目才能看见更改。
3. 先通过编辑器工具栏插件创建一个在工具栏Settings后的按钮后,再使用独立窗口插件在相同位置创建按钮则不会成功,换做其他地方则可以成功,不知缘于何。