UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】

这篇具有很好参考价值的文章主要介绍了UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 需要考虑的问题

重定向的修复函数

代码:

删除无引用资产

代码

需要添加的头文件和模块


在我们删除资产的时候,会发现,有些资产在删除的时候会出现有被什么什么引用,还有的是没有被引用。

而我们如果直接选择一片去进行删除的话,那么会导致看到很多有引用和没有引用的出现。

现在我们需要将没有引用的全部删除,而有引用的全部留下,做一个脚本化资产行为

 需要考虑的问题

1.首先我们会选择一堆资产,如何从资产中,找到没有被引用的资产,然后进行删除。

2.我们要考虑到假如资产迁移后没有修复重定向的情况,所以要在删除无引用资产前需要对重定向器进行全局的一个修复。

3.模块问题,我们修复重定向器的时候,肯定会访问各种各样不同的模块,而对此我们需要进行一个添加。

重定向的修复函数

首先我们做一个函数,这个函数的作用就是在删除资产之前对全局进行一个重定向器的修复,以防止不小心删除了没有修复重定向器的有引用资产

所以这个函数我决定放在private里面使用。

代码:

private:
	//修复重定向器
	void FixUpRedirectors();

首先是加载AssetRegistry模块,然后创建一个过滤器,并对其中进行设置。

之后将通过这个遍历器的资产放入数组中去,再继续遍历,然后再继续获取指定过滤条件的资产信息。

将其中加入到需要修复的数组中去。

继续加载模块。

最后进行修复。

FAssetRegistryModule模块:AssetRegistry模块用于管理项目中的资产信息,包括资产的元数据、引用关系、依赖关系等。它的主要作用是提供对项目中的资产进行查询和操作的接口。

FAssetToolsModule模块:AssetTools模块用于执行与资产操作相关的功能,如创建、删除、重命名等。它提供了一系列的方法来管理项目中的资产。

void UQuicklyAssetAction::FixUpRedirectors()
{
	TArray<UObjectRedirector*> RedirectorsToFixArray;
	//加载AssetRegistry模块
	FAssetRegistryModule& AssetRegistryModule =FModuleManager::Get().LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry"));
	//创建过滤器
	FARFilter Filter;
	Filter.bRecursivePaths = true;//遍历子文件
	Filter.PackagePaths.Emplace("/Game");//遍历 "/Game" 目录下的文件
	Filter.ClassNames.Emplace("ObjectRedirector");//类名为 "ObjectRedirector" 的文件
	//获取满足条件的文件到OutRedirectors中
	TArray<FAssetData> OutRedirectors;
	AssetRegistryModule.Get().GetAssets(Filter, OutRedirectors);
	//将满足条件的文件添加到 RedirectorsToFixArray 数组中
	for (const FAssetData& RedirectorData:OutRedirectors)
	{
		if (UObjectRedirector* RedirectorToFix=Cast<UObjectRedirector>(RedirectorData.GetAsset()))
		{
			RedirectorsToFixArray.Add(RedirectorToFix);
		}
	}
	//加载 AssetTools 模块
	FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>(TEXT("AssetTools"));
	//修复重定向器
	AssetToolsModule.Get().FixupReferencers(RedirectorsToFixArray);
}

删除无引用资产

在完成了修复重定向的函数后,我们来进行真正的无引用资产的删除函数制作:

其实其中的方法很简单,主要的功能和前面两章大差不差,只不过添加了对资产重定向的修复。

代码

void UQuicklyAssetAction::RemoveNoRefAsset()
{
	TArray<FAssetData> SelectedAssetsData = UEditorUtilityLibrary::GetSelectedAssetData();
	TArray<FAssetData> NoRefAssetData;
	//修复重定向器
	FixUpRedirectors();
	for (const FAssetData& SelectedAssetDate:SelectedAssetsData)
	{
		//输入资产的路径,获取对资产的引用,保存在数组里面
		TArray<FString> AssetRefs = UEditorAssetLibrary::FindPackageReferencersForAsset(SelectedAssetDate.ObjectPath.ToString());
		//AssetRefs的数量为0,则表示没有引用,添加到要删除的数组里面,之后统一进行删除
		if (AssetRefs.Num()==0)
		{
			NoRefAssetData.Add(SelectedAssetDate);
		}
	}
	//判断未引用的资产数量是否为0
	if (NoRefAssetData.Num()==0)
	{
		ShowMsgDialog(EAppMsgType::Ok, "No asset with a 0 reference was found among the selected assets.", false);
		return;
	}
	//#include "ObjectTools.h"添加头文件,删除资产
	const int32 DeleteAssetNum= ObjectTools::DeleteAssets(NoRefAssetData);
	if (DeleteAssetNum>0)
	{
		ShowNotifyInfo("Description The asset referenced by 0 is deleted successfully. A total of" + FString::FromInt(DeleteAssetNum) + "files are deleted.", 7);
	}
}

需要添加的头文件和模块

UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】,# UE4/5编辑器,ue5,编辑器,ue4,虚幻,虚幻引擎,c++,游戏引擎

UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】,# UE4/5编辑器,ue5,编辑器,ue4,虚幻,虚幻引擎,c++,游戏引擎文章来源地址https://www.toymoban.com/news/detail-727749.html

到了这里,关于UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月15日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包