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<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);}}
}
大纲列表
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));
}
资源管理窗口
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 发布!
相关文章:
UE小计:顶部工具栏按钮添加下拉列表,大纲列表、资源管理窗口右键添加按键
下拉列表 void FYouPluginsModule::StartupModule() {FYouToolStyle::Initialize();FYouToolStyle::ReloadTextures();FYouToolCommands::Register();PluginCommands MakeShareable(new FUICommandList);PluginCommands->MapAction(FYouToolCommands::Get().PackByCloudAc…...

git stash 用法总结
目录 1,介绍场景1:场景2: 2,常用命令2.1,基础2.2,进阶1,存储时指定备注2,通过索引来操作指定的存储3,修改存储规则 2.3,查看 stash 修改的具体内容 1…...

Linux操作系统之apt常用命令记录
文章目录 apt 命令apt 语法apt 常用命令列出所有可更新的软件清单命令升级软件包列出可更新的软件包及版本信息升级软件包,升级前先删除需要更新软件包安装指定的软件命令:安装多个软件包:更新指定的软件命令显示软件包具体信息,例如…...

TCP 重传、滑动窗口、流量控制、拥塞控制的剖析
TCP 是一个可靠传输的协议,那它是如何保证可靠的呢? 为了实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。 那么,TCP 是…...

LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
思维之树( Tree of Thoughts ToT)是一个算法,它结合了普林斯顿大学和谷歌DeepMind在本文中提出的大型语言模型(LLMs)和启发式搜索。看起来这个算法正在被实现到谷歌正在开发的多模式生成AI Gemini中。 现在࿰…...
Drools 7 Modify 和对象直接赋值差异
modify代表修改fact,会再次触发符合条件的rule对象直接修改只是java 操作,不会会再次触发符合条件的rule 以下为测试代码-drl部分 package org.drools.learnimport org.drools.learn.ModifyTest.Message;global java.util.List listrule "Stateles…...

vivado产生报告阅读分析21
其他命令选项 • -of_objects <suggestion objects> : 启用特定建议的报告。在此模式下运行时 , report_qor_suggestions 不会生成新建议。此命令可快速执行 , 读取 RQS 文件后 , 此命令可用于查看其中包 含的建议。其…...

9.Docker的虚悬镜像-Dangling Image
1.虚悬镜像的概念 虚悬镜像 (Dangling Image) 指的是仓库名 (镜像名) 和标签 TAG 都是 的镜像。 2.构建本地虚悬镜像 这里我以unbuntu为例来说明。 2.1 编写Dockerfile文件 FROM ubuntu:22.042.2 根据Dockerfile文件构建虚悬镜像 docker build .上面这段命令,…...
02- OpenCV:加载、修改、保存图像
目录 1、加载图像(cv::imread) 2、显示图像 (cv::namedWindos 与cv::imshow) 3、修改图像 (cv::cvtColor) 4、保存图像(cv::imwrite) 5、代码演示 1、加载图像(cv::imread) cv::imread 是 OpenCV 库中用于读取图像文件的函数…...

4面试题--数据库(mysql)
执⾏⼀条 select / update 语句,在 MySQL 中发⽣了什么? Server 层负责建⽴连接、分析和执⾏ SQL。MySQL ⼤多数的核⼼功能模块都在这实现,主要包括 连接器,查询缓存(8.0版本去除,因为每次更新将会清空该…...
【LeeCode】283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 解【做的有点呆,额外设置了计数器变量统计0的个数再从后往前赋0】:…...

OSG粒子系统与阴影-自定义粒子系统示例<2>(5)
自定义粒子系统示例(二) 目前自定义粒子的方法有很多,在OSG 中使用的是 Billboard 技术与色彩融合技术。色彩融合是一种高级的渲染技术,如果读者有兴趣,可参看 OSG 粒子系统实现的源代码。这里采用简单的布告牌技术(osg::Billboard)与动画来实…...

微软 Edge 浏览器目前无法支持 avif 格式
avif 格式在微软 Edge 浏览器中还是没有办法支持。 如果你希望能够查看 avif 格式,那么只能通过浏览器打开,然后浏览器将会把这个文件格式下载到本地。 avif 格式已经在其他的浏览器上得到了广泛的支持,目前不支持的可能就只有 Edge 浏览器。…...
用python实现文字转语音的5个较好用的模块
文章目录 一. 用 gtts 模块二. 用pyttsx3模块基本使用直接朗读更改语音、速率和音量 三. baidu-aip四. pywin32五. speech 一. 用 gtts 模块 参考文档:https://gtts.readthedocs.io/en/latest/ 使用前需要先安装:pip3 install gtts ,样例如…...

Windows Server 2012R2 修复CVE-2016-2183(SSL/TLS)漏洞的办法
一、漏洞说明 Windows server 2012R2远程桌面服务SSL加密默认是开启的,且有默认的CA证书。由于SSL/ TLS自身存在漏洞缺陷,当开启远程桌面服务,使用漏洞扫描工具扫描,发现存在SSL/TSL漏洞。远程主机支持的SSL加密算法提供了中等强度的加密算法,目前,使用密钥长度大于等于5…...
python统计字符串中大小写字符个数的性能实测与分析
给定一个字符串,统计字符串中大写字符个数,有如下三种方法: # method1 s1 len(re.findall(r[A-Z],content)) # method2 s2 sum(1 for c in content if c.isupper()) # method3 s3 0 for c in content:if c.isupper()True:s31经过多次实测…...

时间序列预测实战(十九)魔改Informer模型进行滚动长期预测(科研版本)
论文地址->Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 个人魔改版本地址-> 文章末尾 一、本文介绍 在之前的文章中我们已经讲过Informer模型了,但是呢官方的预测功能开发的很简陋只能设定固定长度去预测未…...

[PyTorch][chapter 64][强化学习-DQN]
前言: DQN 就是结合了深度学习和强化学习的一种算法,最初是 DeepMind 在 NIPS 2013年提出,它的核心利润包括马尔科夫决策链以及贝尔曼公式。 Q-learning的核心在于Q表格,通过建立Q表格来为行动提供指引,但这适用于状态…...

用好语言模型:temperature、top-p等核心参数解析
编者按:我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数,帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数,以优化语言模型的生成效果。 文章详细解释了这些参数的作用…...
python之pycryptodome模块,加密算法库
一、简介 PyCryptodome是PyCrypto库的一个分支,它是Python中最受欢迎的密码学库之一。PyCryptodome提供了许多密码学算法和协议的实现,包括对称加密、非对称加密、消息摘要、密码哈希、数字签名等。它还提供了一些其他功能,如密码学安全随机…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...