编辑器扩展

ContentBrowser 扩展

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("ContentBrowser.AssetContextMenu.AssetActionsSubMenu");
FToolMenuSection& Section = Menu->FindOrAddSection("AssetContextAdvancedActions");
Section.AddMenuEntry(
    "HbhTest",
    LOCTEXT("Hbh Test Title", "Hbh Test1"),
    LOCTEXT("Hbh Test TooltipText", "Hbh Test2"),
    FSlateIcon(),
    FToolMenuExecuteAction::CreateLambda([this](const FToolMenuContext& InContext)
    {
        if (UContentBrowserAssetContextMenuContext* Context = InContext.FindContext<UContentBrowserAssetContextMenuContext>())
        {
            for (UObject* Asset : Context->GetSelectedObjects())
            {
                UE_LOG(LogTemp, Log, TEXT("%s"), *Asset->GetPathName());
            }
        }
    })
);

对资产右键,效果:

弹窗

自定义一个弹窗:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
static const FName TabName("Your Tab Name");

FGlobalTabmanager::Get()->RegisterNomadTabSpawner(TabName, FOnSpawnTab::CreateRaw(this, &OnSpawnTab))
    .SetDisplayName(LOCTEXT("xxx", "xxx"))
    .SetMenuType(ETabSpawnerMenuType::Hidden);

FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(TabName);

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

TSharedRef<SDockTab> OnSpawnTab(const FSpawnTabArgs& SpawnTabArgs)
{
	return SNew(SDockTab)
		.TabRole(ETabRole::NomadTab)
		[
			SNew(xxx)
		];
}

如果只是想要一个弹出窗口显示信息,可以直接使用 FMessageDialog:

https://docs.unrealengine.com/5.3/en-US/API/Runtime/Core/Misc/FMessageDialog/

https://zhuanlan.zhihu.com/p/268069477

1
2
3
4
5
FMessageDialog::Open(EAppMsgType::Ok, NSLOCTEXT("xx", "xxx"));

int32 Count = 32;
FString Dialog = FString::Printf(TEXT("%d"), Count);
FMessageDialog::Open(EAppMsgType::Ok, FText::FromString(Dialog));

Notify/Notification

1
2
3
4
5
6
7
#include "Framework/Notifications/NotificationManager.h"
#include "Widgets/Notifications/SNotificationList.h"

FText Message = FText::FromString("111");
FNotificationInfo NotifyInfo(Message);
NotifyInfo.FadeOutDuration = 5.f;
FSlateNotificationManager::Get().AddNotification(NotifyInfo);

https://zhuanlan.zhihu.com/p/605796062

https://zhuanlan.zhihu.com/p/662401350

进度条

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include "Misc/ScopedSlowTask.h"

FScopedSlowTask SlowTask(files.Num(), LOCTEXT("GeneratingDataText", "Generating Data"));
SlowTask.MakeDialog();

for (auto& file : files)
{
	SlowTask.EnterProgressFrame();	
	//Implementation can be before or after
}

参考:

https://forums.unrealengine.com/t/how-can-i-use-unreal-engine-editors-progress-bar-not-umg/359876

https://docs.unrealengine.com/5.3/en-US/API/Runtime/Core/Misc/FScopedSlowTask/

Licensed under CC BY-NC-SA 4.0