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);}}//判断未引用的资产数量是否为0if (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);}
}

需要添加的头文件和模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP 伪协议:使用 php://input 访问原始 POST 数据

文章目录 参考环境PHP 伪协议概念为什么需要 PHP 伪协议&#xff1f; php://input为什么需要 php://input&#xff1f;更灵活的数据处理减小性能压力 发送 POST 数据HackBarHackBar 插件的获取 $_POST打开 HackBar 插件通过 HackBar 插件发起 POST 请求 基操 enable_post_data_…

ROS机械臂开发-开发环境搭建【一】

目录 前言环境配置docker搭建Ubuntu环境安装ROS 基础ROS文件系统 bugs 前言 想系统学习ROS&#xff0c;做一些机器人开发。因为有些基础了&#xff0c;这里随便写写记录一下。 环境配置 docker搭建Ubuntu环境 Dockerfile # 基础镜像 FROM ubuntu:18.04 # 设置变量 ENV ETC…

[开源]基于Vue的拖拽式数据报表设计器,为简化开发提高效率而生

一、开源项目简介 Cola-Designer 是一个 基于VUE&#xff0c;实现拖拽 配置方式生成数据大屏&#xff0c;为简化开发、提高效率而生。 二、开源协议 使用GPL-2.0开源协议 三、界面展示 概览 部分截图&#xff1a; 四、功能概述 特性 0 代码 实现完全拖拽 配置式生成…

【好玩】如何在github主页放一条贪吃蛇

前言 &#x1f34a;缘由 github放小蛇&#xff0c;就问你烧不烧 起因看到大佬github上有一条贪吃蛇扭来扭去&#xff0c;觉得好玩&#xff0c;遂给大家分享一下本狗的玩蛇历程 &#x1f95d;成果初展 贪吃蛇 &#x1f3af;主要目标 实现3大重点 1. github设置主页 2. git…

C#学习系列相关之多线程(二)----Thread类介绍

一、线程初始化 1.无参数 static void Main(string[] args) {//第一种写法Thread thread new Thread(test);thread.Start();//第二种写法 delegateThread thread1 new Thread(new ThreadStart(test));thread1.Start();//第三种写法 lambdaThread thread2 new Thread(() >…

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务

项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管理的提升提出了更高的要求。 二、企业通过数字化转型&#xff0c;不仅有利于优化业务流程、提升经营管理…

LeakyReLU激活函数

nn.LeakyReLU 是PyTorch中的Leaky Rectified Linear Unit&#xff08;ReLU&#xff09;激活函数的实现。Leaky ReLU是一种修正线性单元&#xff0c;它在非负数部分保持线性&#xff0c;而在负数部分引入一个小的斜率&#xff08;通常是一个小的正数&#xff09;&#xff0c;以防…

应用安全系列之四十:登录常见问题以及预防方法

对于所有系统而言,登录是一个必备的而且最重要的功能。随着系统越来越复杂,服务越来越多,为了方便用户使用系统的服务,SSO应运而生,SSO虽然方便了用户使用系统,也增加了风险。因为一旦登录出现问题,就很容易通过登录访问整个系统。可见,对于登录如果没有控制好,攻击者…

Git使用【中】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析3 目录 &#x1f449;&#x1f3fb;分支管理分支概念git branch&#xff08;查看/删除分…

【数组】二分查找(减不减一,看初始化!)

一、力扣习题链接 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 二、思路 这道题目的前提是数组为有序数组&#xff0c;同时题目还强调数组中无重复元素&#xff0c;因为一旦有重复元素&#xff0c;使用二分查找法返回的元素下标可能不是唯一的&#xff0c;这些都是…

复旦大学EMBA:揭秘科创企业,领略未来战略!

智能制造&#xff0c;国之重器。作为制造强国建设的主攻方向&#xff0c;智能制造的发展水平关系到我国未来制造业在全球的地位与影响力。发展智能制造&#xff0c;是加快建设现代化产业体系的重要手段&#xff0c;提升供给体系适配性的有力抓手&#xff0c;也是建设数字中国的…

css的gap设置元素之间的间隔

在felx布局中可以使用gap来设置元素之间的间隔&#xff1b; .box{width: 800px;height: auto;border: 1px solid green;display: flex;flex-wrap: wrap;gap: 100px; } .inner{width: 200px;height: 200px;background-color: skyblue; } <div class"box"><…

基于SSM的固定资产管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

ROS2 Galactic安装

ROS2 Galactic安装 ROS2 Galactic安装字体编码检查添加ros2仓库到本机安装ROS2系统测试ROS卸载ros2 ROS2 Galactic安装 字体编码检查 安装需要设置本级为UTF-8字体&#xff0c;使用如下指令检查&#xff1a; locale # check for UTF-8sudo apt update && sudo apt …

Acwing.886 求组合数Ⅱ

题目 给定n组询问&#xff0c;每组询问给定两个整数a&#xff0c; b&#xff0c;请你输出 的值。 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含—组a和b。 输出格式 共n行&#xff0c;每行输出—个询问的解。 数据范围 1<n≤10000, 1 <b<a≤105…

《C和指针》笔记31:多维数组的数组名、指向多维数组的指针、作为函数参数的多维数组

文章目录 1. 指向多维数组的数组名2. 指向多维数组的指针3. 作为函数参数的多维数组 1. 指向多维数组的数组名 我们知道一维数组名的值是一个指针常量&#xff0c;它的类型是“指向元素类型的指针”&#xff0c;它指向数组的第1个元素。那么多维数组的数组名代表什么呢&#x…

点餐小程序实战教程06-首页开发

用户注册功能开发好了之后&#xff0c;我们就要开发小程序&#xff0c;首先我们是规划小程序的功能模块&#xff0c;我们一共是四个模块&#xff0c;分别是首页、订单、消息和我的。 首页我们主要是点餐的功能&#xff0c;可以选择菜品&#xff0c;加入到购物车&#xff0c;然…

Flink---10、处理函数(基本处理函数、按键分区处理函数、窗口处理函数、应用案例TopN、侧输出流)

星光下的赶路人star的个人主页 我的敌手就是我自己&#xff0c;我要他美好到能使我满意的程度 文章目录 1、处理函数1.1 基本处理函数&#xff08;ProcessFunction&#xff09;1.1.1 处理函数的功能和使用1.1.2 ProcessFunction解析1.1.3 处理函数的分类 1.2 按键分区处理函数&…

剑指offer——JZ34 二叉树中和为某一值的路径(二) 解题思路与具体代码【C++】

一、题目描述与要求 二叉树中和为某一值的路径(二)_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入一颗二叉树的根节点root和一个整数expectNumber&#xff0c;找出二叉树中结点值的和为expectNumber的所有路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过…

“国产版”的chatgpt国内用户的更优选择!一定要收藏!

众所周知&#xff0c;chatGPT没有对国内开放使用权限&#xff0c;因此国内的用户是不可以使用直接使用chatgpt的&#xff0c;部分朋友想要通过使用网络工具使用其对话服务&#xff0c;这种行为显然是不可取的。其实也有好用的国产版的chatGPT网站&#xff0c;只是大家可能之前没…