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

下拉列表

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
                {
                    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);
        }
    }
}

大纲列表

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 OnExtendLevelEditorMenu(const TSharedRef CommandList, TArray SelectedActors)
{
    TSharedRef Extender(new FExtender());
    Extender->AddMenuExtension(
        "ActorControl",
        EExtensionHook::After,
        CommandList,
        FMenuExtensionDelegate::CreateStatic(&AddCustomMenuEntry)
    );
    return Extender;
}

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

资源管理窗口

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

void FYourGameEditorModule::MenuExtension(FMenuBuilder& MenuBuilder, TArray 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(TEXT("ContentBrowser"));
    TArray& MenuExtenderDelegates = ContentBrowserModule.GetAllAssetViewContextMenuExtenders();
    ContentBrowserAssetExtenderDelegate = FContentBrowserMenuExtender_SelectedAssets::CreateRaw(this,&FYourGameEditorModule::OnExtendContentBrowserAssetSelectiongMenu);
    MenuExtenderDelegates.Add(ContentBrowserAssetExtenderDelegate);
    ContentBrowserAssetExtenderDelegateHandle = MenuExtenderDelegates.Last().GetHandle();
}

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

你可能感兴趣的:(UE)