UE小计:顶部工具栏按钮添加下拉列表,大纲列表、资源管理窗口右键添加按键

下拉列表

cpp 复制代码
void FYouPluginsModule::StartupModule()
{
    FYouToolStyle::Initialize();
    FYouToolStyle::ReloadTextures();
    FYouToolCommands::Register();

    PluginCommands = MakeShareable(new FUICommandList);

    PluginCommands->MapAction(
        FYouToolCommands::Get().PackByCloudAction,
        FExecuteAction::CreateRaw(this,&FYouPluginsModule::OpenPakWidget),
        FCanExecuteAction()
    );

    PluginCommands->MapAction(
        FYouToolCommands::Get().GenerateJSAction,
        FExecuteAction::CreateRaw(this,&FYouPluginsModule::GenerateJS),
        FCanExecuteAction()
    );
    UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this,&FYouPluginsModule::RegisterMenus));
}

void FYouPluginsModule::RegisterMenus()
{
    FToolMenuOwnerScoped OwnerScoped(this);
    UToolMenu* ToolMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.User");
    {
        FToolMenuSection& Section = ToolMenu->AddSection("YouTool");
        Section.AddSeparator("YouToolSeparator");
        {
            FToolMenuEntry SettingEntry = FToolMenuEntry::InitComboButton(
                "YouToolMenus",
                FUIAction(),
                FOnGetContent::CreateLambda([&]()->TSharedRef<SWidget,ESPMode::ThreadSafe>
                {
                    FMenuBuilder MenuBuilder(true,PluginCommands);

                    MenuBuilder.BeginSection("YouTool",LOCTEXT("Package Tool","Pack Asset Or Scene witch Cloud"));
                    MenuBuilder.AddMenuEntry(FYouToolCommands::Get().PackByCloudAction);
                    MenuBuilder.EndSection();
                    return MenuBuilder.MakeWidget();
                }),
                LOCTEXT("YouToolMenu","YouTool"),
                LOCTEXT("YouToolMenuTooltip","Package Asset Or Scene"),
                FSlateIcon(FYouToolStyle::GetStyleSetName(),"YouTool"),
                false,
                "YouToolMenu"
            );
            SettingEntry.StyleNameOverride = "CalloutToolbar";
            SettingEntry.SetCommandList(PluginCommands);
            Section.AddEntry(SettingEntry);
        }
    }
}

大纲列表

cpp 复制代码
void AddCustomMenuEntry(FMenuBuilder& MenuBuilder)
{
    MenuBuilder.AddMenuEntry(
        FText::FromString("Editor UserData"),
        FText::FromString("Perform an action with the Editor UserData."),
        FSlateIcon(),
        FUIAction(FExecuteAction::CreateStatic([]()
        {
            // 这里是当你的菜单项被点击时要执行的代码
            UE_LOG(LogTemp, Log, TEXT("Editor UserData clicked!"));
        }))
    );
}

TSharedRef<FExtender> OnExtendLevelEditorMenu(const TSharedRef<FUICommandList> CommandList, TArray<AActor*> SelectedActors)
{
    TSharedRef<FExtender> Extender(new FExtender());
    Extender->AddMenuExtension(
        "ActorControl",
        EExtensionHook::After,
        CommandList,
        FMenuExtensionDelegate::CreateStatic(&AddCustomMenuEntry)
    );
    return Extender;
}

void FYourGameEditorModule::StartupModule()
{
    FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
    auto& MenuExtenders = LevelEditorModule.GetAllLevelViewportContextMenuExtenders();
    MenuExtenders.Add(FLevelEditorModule::FLevelViewportMenuExtender_SelectedActors::CreateStatic(&OnExtendLevelEditorMenu));
}

资源管理窗口

cpp 复制代码
TSharedRef<FExtender> FYourGameEditorModule::OnExtendContentBrowserAssetSelectiongMenu(const TArray<FAssetData>& SelectAssets)
{
    TSharedRef<FExtender> Extender(new FExtender());
    Extender->AddMenuExtension(
        "CommonAssetActions",
        EExtensionHook::After,
        nullptr,
        FMenuExtensionDelegate::CreateRaw(this,&FYourGameEditorModule::MenuExtension,SelectAssets)
    );
    return Extender;
}

void FYourGameEditorModule::MenuExtension(FMenuBuilder& MenuBuilder, TArray<FAssetData> SelectAssets)
{
    MenuBuilder.AddMenuEntry(
        LOCTEXT("PakAssetTitle","Pak Asset"),
        LOCTEXT("PakAssetTooltipText","Pak Asset And Dependence"),
        //todo 增肌icon
        // FSlateIcon(FPakToolEditorStyle::GetStyleSetName(), "PakTool"),
        FSlateIcon(),
        FUIAction(FExecuteAction::CreateRaw(this,&FYourGameEditorModule::OnClickMenu,SelectAssets,false))
    );
    MenuBuilder.AddMenuEntry(
        LOCTEXT("PakAssetPIETitle","Pak Asset PIE"),
        LOCTEXT("PakAssetTooltipPIEText","Pak Asset And Dependence In Editor"),
        // FSlateIcon(FPakToolEditorStyle::GetStyleSetName(), "PakTool"),
        FSlateIcon(),
        FUIAction(FExecuteAction::CreateRaw(this,&FYourGameEditorModule::OnClickMenu,SelectAssets,true))
    );
}

void FYourGameEditorModule::StartupModule()
{
    FContentBrowserModule& ContentBrowserModule = FModuleManager::LoadModuleChecked<FContentBrowserModule>(TEXT("ContentBrowser"));
    TArray<FContentBrowserMenuExtender_SelectedAssets>& MenuExtenderDelegates = ContentBrowserModule.GetAllAssetViewContextMenuExtenders();
    ContentBrowserAssetExtenderDelegate = FContentBrowserMenuExtender_SelectedAssets::CreateRaw(this,&FYourGameEditorModule::OnExtendContentBrowserAssetSelectiongMenu);
    MenuExtenderDelegates.Add(ContentBrowserAssetExtenderDelegate);
    ContentBrowserAssetExtenderDelegateHandle = MenuExtenderDelegates.Last().GetHandle();
}

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
妙为1 天前
unreal engine5角色把敌人 “挤飞”
游戏引擎·虚幻·ue·unrealengine5
曼巴UE54 天前
UE Sequencer,MediaPlay的使用经验总结
ue5·音视频·ue
曼巴UE57 天前
UE5 C++ 里创造 和 使用编辑GamePlayTag
c++·ue5·ue
曼巴UE58 天前
UE5 C++ GameInstanceSubsystem 在学习
c++·ue5·ue
njsgcs13 天前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
qq_4286396121 天前
ue无双割草项目:4.让AI受伤及添加UI
ui·ue·无双割草
qq_4286396121 天前
ue无双割草项目:5.让玩家能够受伤
ue·无双割草
qq_4286396122 天前
ue无双割草项目:3.做个人工智障
ue·无双割草
qq_4286396123 天前
ue无双割草项目:2.让角色能够攻击
ue·无双割草
曼巴UE523 天前
UE GamePlayTag
c++·ue5·ue