当前位置: 首页 > news >正文

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】

目录

了解相关的函数

第一种做法:自定义添加选择资产的前缀或后缀

代码

效果

第二种做法:通过映射来获取资产类型添加前缀和修改前缀

映射代码

代码

效果


在之前一章中,我们创建了插件,用来扩展编辑器的使用:

UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】-CSDN博客

现在我们需要的是能够更快的对资产的名字进行一个更改,比如对前缀名的添加,或者是后缀的删除等等。

了解相关的函数

要更改资产的名字,首先我们要先了解几个相关的编辑器函数,以及FString的使用:

首先是RenameAsset,这个函数是属于UEditorUtilityLibrary,使用的时候就是输入资产和新的名字。

然后是FString的使用,这里只需要+即可,比如你要加前缀Prefix,则Prefix+name即可,后缀也是一样。

当然这只是一种做法,除此之外,还有通过判断类型来直接添加名字。

第一种做法:自定义添加选择资产的前缀或后缀

如果是需要自定义选择前缀名,那么我们需要的是输入一个FString和一个bool。

通过bool来判断你是要添加前缀还是后缀。

首先遍历选择的资产,然后检查是否有效,然后判断是添加前缀还是后缀,最后进行添加。

然后右下角通知添加前缀成功。

代码

void UQuicklyAssetAction::AddAssetPreOrEndfixes(FString Assetfixes, bool PrefixOrPostfix)
{TArray<UObject*> SelectedObjects = UEditorUtilityLibrary::GetSelectedAssets();uint32 Counter = 0;for (UObject* SelectedObject : SelectedObjects){if (!SelectedObject)//检查是否有效{continue;}FString NewName;if (PrefixOrPostfix)//添加前缀{NewName = Assetfixes + SelectedObject->GetName();}else//添加后缀{NewName = SelectedObject->GetName()+ Assetfixes;}UEditorUtilityLibrary::RenameAsset(SelectedObject, NewName);Counter++;}if (Counter>0){if (PrefixOrPostfix){ShowNotifyInfo("Prefix add "+FString::FromInt(Counter)+" files",7);}else{ShowNotifyInfo("Postfix add " + FString::FromInt(Counter) + " files", 7);}}
}	

效果

可以看到里面有相关注释和行为:

然后点击:

第二种做法:通过映射来获取资产类型添加前缀和修改前缀

首先我们做一个映射,这个映射的作用就是判断你的资产是属于哪种类的存在:

映射代码

TMap<UClass*, FString> PrefixMap ={{UBlueprint::StaticClass(),TEXT("BP_")},{UStaticMesh::StaticClass(),TEXT("SM_")},{UMaterial::StaticClass(),TEXT("M_")},{UMaterialInstanceConstant::StaticClass(),TEXT("MI_")},{UMaterialFunction::StaticClass(),TEXT("MF_")},{UParticleSystem::StaticClass(),TEXT("PS_")},{USoundCue::StaticClass(),TEXT("SC_")},{USoundWave::StaticClass(),TEXT("SW_")},{UTexture::StaticClass(),TEXT("T_")},{UTexture2D::StaticClass(),TEXT("T2D_")},{UUserWidget::StaticClass(),TEXT("UI_")},//用户控件无效,需要继续寻找{USkeletalMeshComponent::StaticClass(),TEXT("SK_")},{UNiagaraSystem::StaticClass(),TEXT("NS_")},{UNiagaraEmitter::StaticClass(),TEXT("NE_")}};

做好这个映射之后【有些可能有问题,需要自己去重新查找一下相关的类】

接下来和之前一样,去遍历我们选择的资产,然后寻找资产的类,来获取我们做的映射中的value值【前缀】。

然后在获取资产名字来判断这个资产是否已经有了和这个一样的前缀,有了就不加了。

然后继续做一个判断,假如你做了一个材质实例,那么其名字必然是M_XXX_Inst,我们如果直接添加了名字,就会变成MI_M_XXX_Inst,所以在添加之前,我们需要先判断一下,前缀是不是M_和后缀是不是_Inst

是的话,就进行删除,然后在重命名。

代码

void UQuicklyAssetAction::WithClassAddAssetPrefixes()
{//将选择的资产放入数组TArray<UObject*> SelectedObjects = UEditorUtilityLibrary::GetSelectedAssets();uint32 Counter = 0;//遍历选择的资产for (UObject* SelectedObject : SelectedObjects){//如果无效则跳入下一次迭代if (!SelectedObject){continue;}//返回的是FString指针,通过选择资产的类作为key来找到PrefixMap映射中的value,如M_FString*  PrefixFound =PrefixMap.Find(SelectedObject->GetClass());//判断是否有效和存在if (!PrefixFound || PrefixFound->IsEmpty()){//无效则打印没有找到,然后输出这个类的类的名字DebugPrint(TEXT("Failed to find Prefix for class ") + SelectedObject->GetClass()->GetName(), FColor::Red);DebugPrintLog(TEXT("Failed to find Prefix for class ") + SelectedObject->GetClass()->GetName());continue;}//获取老资产的名字FString OldName = SelectedObject->GetName();//判断资产的名字是否以PrefixFound开头:如M_if (OldName.StartsWith(*PrefixFound)){DebugPrint(OldName + " already have the prefix!", FColor::Red);DebugPrintLog(OldName + " already have the prefix!");continue;}//这里做材质实例的检查if (SelectedObject->IsA<UMaterialInstanceConstant>()){//检查有没有,有就移除OldName.RemoveFromStart("M_");OldName.RemoveFromEnd("_Inst");}//做新的名字const FString NewNameWithPrefix = *PrefixFound + OldName;//重命名和计数UEditorUtilityLibrary::RenameAsset(SelectedObject, NewNameWithPrefix);Counter++;}if (Counter>0){ShowNotifyInfo("Success rename Asset " + FString::FromInt(Counter) + "Assets", 7);}
}

添加头文件和模块

需要注意的是这种方法我们需要对相关类型的头文件进行添加,以及相关的模块。

模块添加:

头文件添加​​​​​​​

#include "Materials/Material.h"
#include "Materials/MaterialInstanceConstant.h"
#include "Particles/ParticleSystem.h"
#include "Sound/SoundCue.h"
#include "Sound/SoundWave.h"
#include "Engine/Texture.h"
#include "Blueprint/UserWidget.h"
#include "Components/SkeletalMeshComponent.h"
#include "NiagaraSystem.h"
#include "NiagaraEmitter.h"

效果

相关文章:

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】

目录 了解相关的函数 第一种做法&#xff1a;自定义添加选择资产的前缀或后缀 代码 效果 第二种做法&#xff1a;通过映射来获取资产类型添加前缀和修改前缀 映射代码 代码 效果 在之前一章中&#xff0c;我们创建了插件&#xff0c;用来扩展编辑器的使用&#xff1a; …...

短期风速预测|LSTM|ELM|批处理(matlab代码)

目录 1 主要内容 LSTM-长短时记忆 ELM-极限学习机 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序是预测类的基础性代码&#xff0c;程序对河北某地区的气象数据进行详细统计&#xff0c;程序最终得到pm2.5的预测结果&#xff0c;通过更改数据很容易得到风速预测结…...

【LeetCode热题100】--102.二叉树的层序遍历

102.二叉树的层序遍历 广度优先搜索&#xff1a; 我们可以想到最朴素的方法是用一个二元组 (node, level) 来表示状态&#xff0c;它表示某个节点和它所在的层数&#xff0c;每个新进队列的节点的 level 值都是父亲节点的 level 值加一。最后根据每个点的 level 对点进行分类&…...

第44节——redux store

一、概念 Redux 是一个用于管理 JavaScript 应用状态的库。在 Redux 中&#xff0c;整个应用的状态都存储在一个对象中&#xff0c;称为 store。 Store 实际上是一个 JavaScript 对象&#xff0c;它存储了整个应用的状态。它是唯一的&#xff0c;意味着应用中只有一个 store。…...

【2023年11月第四版教材】第17章《干系人管理》(第二部分)

第17章《干系人管理》&#xff08;第二部分&#xff09; 4 过程1-识别干系人4.1 数据收集★★★4.3数据分析4.4 权力利益方格4.5 数据表现&#xff1a;干系人映射分析和表现★★★ 5 过程2-规划干系人参与5.1 数据分析5.2 数据表现★★★5.2.1 干系人参与度评估矩阵★★★ 5.3 …...

含分布式电源的配电网可靠性评估(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考《基于仿射最小路法的含分布式电源配电网可靠性分析》文献方法&#xff0c;通过概率模型和时序模型分别进行建模&#xff0c;实现基于概率模型最小路法的含分布式电源配电网可靠性评估以及时序模型…...

react的组件

组件 组件是用来实现局部功能的代码和资源的集合&#xff08;html/css/js&#xff09;&#xff0c;用来复用代码。 react中分为函数式组件和类式组件。函数式组件就是一个函数&#xff0c;函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类&#xff0c;类…...

低功耗引擎Cliptrix为什么可以成为IOT的高效能工具

在万物互联的时代&#xff0c;现代人已普遍接受电视、音箱等电器设备具备智能化能力&#xff0c;也是在这个趋势下&#xff0c;我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点&#xff0c;例如iot设备的内存、处理器等核心元件无法与手机…...

深入学习git

1、git原理及整体架构图 一些常用的命令 git add . 或 git add src/com/ygl/hello/hello.java 指定文件 git commit . 或 git commit src/com/ygl/hello/hello.java 指定文件 git push origin 分支名称 2、git stash的应用场景 场景一&#xff1a;你正在当前分支A开发&…...

第9章 Mybatis

9.1 谈谈你对Mybatis的理解 难度:★★ 重点:★★ 白话解析 说清楚Mybatis是什么,它的工作流程,然后再对比一下Hibernate就好了。 1、Mybatis是什么:它一个半自动ORM框架,它底层把JDBC那套加载驱动、创建连接、创建statement等重复性的硬编码全部给你封装好了,程序员只…...

隐蔽通信论文复现

文章目录 前言一、Limits of Reliable Communication with Low Probability of Detection on AWGN Channels摘要introduction 前言 本文准备先考虑隐蔽中通信经典的Alice, Bob, Willie三点模型, 总结出其中的经典套路 一、Limits of Reliable Communication with Low Probabil…...

《Vue.js+Spring Boot全栈开发实战》简介

大家好&#xff0c;我是老卫。 恰逢中秋国庆双节&#xff0c;不想出门看人山&#xff0c;惟愿宅家阅书海&#xff01; 今天开箱的这本书是《Vue.jsSpring Boot全栈开发实战》。 外观 从书名故名思议&#xff0c;就是基于Vue.jsSpring Boot来实现企业级应用全栈开发。 该书由…...

机器人中的数值优化(二十)——函数的光滑化技巧

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…...

搭建全连接网络进行分类(糖尿病为例)

拿来练手&#xff0c;大神请绕道。 1.网上的代码大多都写在一个函数里&#xff0c;但是其实很多好论文都是把网络&#xff0c;数据训练等分开写的。 2.分开写就是有一个需要注意的事情&#xff0c;就是要import 要用到的文件中的模型或者变量等。 3.全连接的回归也写了&#…...

【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…...

Verasity Tokenomics — 社区讨论总结与下一步计划

Verasity 代币经济学的社区讨论已结束。 本次讨论从 8 月 4 日持续到 9 月 29 日&#xff0c;是区块链领域规模最大的讨论之一&#xff0c;超过 500,000 名 VRA 持有者和社区成员参与讨论&#xff0c;并收到了数千份回复。 首先&#xff0c;我们要感谢所有参与讨论并提出详细建…...

JUC第十三讲:JUC锁: ReentrantLock详解

JUC第十三讲&#xff1a;JUC锁: ReentrantLock详解 本文是JUC第十三讲&#xff0c;JUC锁&#xff1a;ReentrantLock详解。可重入锁 ReentrantLock 的底层是通过 AbstractQueuedSynchronizer 实现&#xff0c;所以先要学习上一章节 AbstractQueuedSynchronizer 详解。 文章目录 …...

WSL2安装历程

WLS2安装 1、系统检查 安装WSL2必须运行 Windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 Windows 11。 查看 Windows 版本及内部版本号&#xff0c;选择 Win R&#xff0c;然后键入winver。 2、家庭版升级企业版 下载HEU_KMS_Activ…...

Ubuntu20配置Mysql常用操作

文章目录 版权声明ubuntu更换软件源Ubuntu设置静态ipUbuntu防火墙ubuntu安装ssh服务Ubuntu安装vmtoolsUbuntu安装mysql5.7Ubuntu安装mysql8.0Ubuntu卸载mysql 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程…...

【解决方案】‘create’ is not a member of ‘cv::aruco::DetectorParameters’

‘create’ is not a member of ‘cv::aruco::DetectorParameters’ 在构建AruCo标定板标定位姿代码的过程中&#xff0c;发现代码中认为create并不是aruco::DetectorParameters的成员函数&#xff0c;这是因为在4.7.0及以上的OpenCV版本中&#xff0c;对ArUco的代码做调整&…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...