有時候需要在編輯器上添加自定義的項目。新建插件,在插件的StartupModule註冊,並在ShutdownModule取消註冊。假設已經新建了一個基於SCompoundWidget的控件SMyEditor,把該控件註冊到開發者工具中。
#include "UI.h"
#include "Modules/ModuleManager.h"
#include "Interfaces/IMainFrameModule.h"
#include "Editor/WorkspaceMenuStructure/Public/WorkspaceMenuStructure.h"
#include "Editor/WorkspaceMenuStructure/Public/WorkspaceMenuStructureModule.h"
#include "EditorStyleSet.h"
#include "Framework/Docking/TabManager.h"
#include "Widgets/Docking/SDockTab.h"
#include "MyEditor.h"
#define LOCTEXT_NAMESPACE "FUIModule"
IMPLEMENT_MODULE(FUIModule, UI)
void FUIModule::StartupModule()
{
FGlobalTabmanager::Get()->RegisterNomadTabSpawner("MyEditorTabId", FOnSpawnTab::CreateRaw(&FUIModule::SpawnEditor))
.SetDisplayName(LOCTEXT("MyEditorTest", "MyEditor"))
.SetTooltipText(LOCTEXT("MyEditorTestTooltipText", "MyEditorTip"))
.SetGroup(WorkspaceMenu::GetMenuStructure().GetDeveloperToolsMiscCategory())
.SetMenuType(ETabSpawnerMenuType::Enabled)
.SetIcon(FSlateIcon(FEditorStyle::GetStyleSetName(), "ContentBrowser.ImportIcon"));
}
void FUIModule::ShutdownModule()
{
FGlobalTabmanager::Get()->UnregisterTabSpawner("MyEditorTabId");
}
TSharedRef<SDockTab> FUIModule::SpawnEditor(const FSpawnTabArgs& SpawnTabArgs)
{
const TSharedRef<SDockTab> Tab =
SNew(SDockTab)
.Icon(FEditorStyle::GetBrush("ContentBrowser.ImportIcon"))
.TabRole(ETabRole::NomadTab);
Tab->SetContent(SNew(SMyEditor));
return Tab;
}
#undef LOCTEXT_NAMESPACE
需要在Build.cs 中補充添加需要依賴的模塊,效果如下: