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

这篇具有很好参考价值的文章主要介绍了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);
		}
	}
}	

效果

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

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

然后点击:

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

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

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

映射代码

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

添加头文件和模块

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

模块添加:

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

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

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

#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.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言

UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】,# UE4/5编辑器,ue5,ue4,虚幻,虚幻引擎,编辑器,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-727922.html

到了这里,关于UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在UE5编辑器环境中使用Python

    UE有很多Python方案,本文所讲述的Python为UE5官方内嵌版本方案,并且只能在编辑器环境下使用,使用该功能可以编写编辑器下的辅助工具,提升开发效率。 讲一讲UE5中调用Python的几种方式,首先是控制台下调用Python,将控制台的CMD图标换成Python,即可输入并执行Python语句:

    2024年02月11日
    浏览(50)
  • UE5 MetaHuman SDK插件的使用【一、编辑器创建音波与蓝图创建获取音波,语音与嘴唇口型的同步】

    目录 打开插件 创建音频 编辑器这直接创建音频: 蓝图中创建和获取音频: 唇语: 声音与嘴唇同步: 方法一【效果不是很好】: 方法二【效果很好,但有一段时间延迟在处理】: 逻辑: MetaHuman SDK插件 目前只支持 ue5 和 ue5.1 版本。 首先第一步 创建音频 : 这样音频就创建

    2024年02月09日
    浏览(48)
  • Unity编辑器拓展-Odin

    Unity不支持泛型类型序列化,例如字典原生Unity不支持序列化,而Odin可以继承序列化的Mono实现 功能强大且使用简单,原生Unity想实现一些常见的功能需要额外自己编写Unity扩展的编码,实现功能只需要加一个特性即可Odin帮忙写好了内部管理和实现 编辑器的窗口实现简单且美观

    2024年02月08日
    浏览(41)
  • 【Unity编辑器】拓展Project视图

    目录 1、拓展右键菜单 2、创建一个菜单 3、拓展布局 4、监听事件 首先创建一个Editor文件夹,此文件夹可以作为多个目录的子文件夹存在,这样开发者就可以按照功能来划分,将不同功能的编辑代码放在不同的Editor目录下。 如果属于编辑模式下的代码,需要放在Editor文件夹下

    2024年02月02日
    浏览(40)
  • 【Unity编辑器】拓展Hierarchy视图

    目录 1、拓展菜单 2、拓展布局 3、重写菜单 在Hierarchy视图中点击Create按钮,弹出的菜单My Create-Cube就是自定义拓展菜单 菜单中已经包含了系统默认的一些菜单项,我们拓展的原理就是重写MenuItem的自定义路径。Create按钮下的菜单项都在GameOject路径下面,所以只要开头是GameOb

    2024年02月02日
    浏览(50)
  • 【Unity编辑器】拓展Inspector视图

    目录 1、拓展源生组件 2、拓展继承组件 3、组件不可编辑 4、Context菜单 摄像机就是典型的源生组件。它的局限性就是拓展组件只能加在源生组件的最上面或者最下面,不能插在中间,不过这样也就够了 CustomEditor()表示自定义哪个组件,OnInspectorGUI()可以对它进行重新绘制,b

    2024年02月07日
    浏览(67)
  • Unity UGUI一键绑定UI控件工具(编辑器拓展)

    全为一键生成 实现自动生成代码绑定UI控件 并生成字典保存UI控件 减少自己拖拽 和手动书写过程 适用动态加载面板 建议搭配UI框架使用 根据当前选中的gameobject 查找其下方是否有对应类型的控件 有就保存到字典中 然后通过向上递归拼凑地址,然后生成到粘贴板 直接粘贴到目

    2024年04月23日
    浏览(62)
  • Unity编辑器拓展——Editor模式下屏幕坐标转换为世界坐标

    发会牢骚,最近一直在做Unity的编辑器拓展,其中难的地方不少,但不至于到看不懂的地步,可一做到关于坐标转换的内容时把我弄不会了。 这个不查不知道,一查吓一跳,Unity的坐标系非常多,有世界坐标,屏幕坐标,局部坐标,视窗坐标等等,而且每一个都是不一样的坐

    2024年02月03日
    浏览(50)
  • Unity行为树可视化编辑器开发

    在ARPG项目的开发过程当中,要涉及到NPC的AI系统,一般来说,简单的AI行为使用状态机即可比较好的实现,但如果NPC的行为稍微一复杂,那么使用状态机来实现就会比较难维护,并且后期工作量会随着NPC状态的增加而成倍增加。 这时就可以考虑使用行为树来实现NPC的AI,行为

    2024年02月11日
    浏览(44)
  • 虚幻引擎UE编辑器卡顿问题

    使用虚幻引擎编辑器编辑蓝图页面卡顿,视角无法转动,只能放大缩小,甚至事件图表都无法拖动。 显卡驱动安装与N卡适配的studio版本。 在NVIDIA显卡控制面板3D设置,程序设置找到UE,设置UE OpenGL渲染为GPU。 设置里找到图形设置,添加UE,设置图形首选项为高性能。

    2024年02月15日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包