UE5 C++: 插件编写05 | 批量删除无用资产

news2024/11/24 7:02:58

删除无用的asset

已经在地图中使用的asset会有asset reference

EditorAssetLibrary(按F12)open header file,会有如下一个功能,可以找asset reference,返回bool值

	UFUNCTION(BlueprintCallable, Category = "Editor Scripting | Asset")
	static TArray<FString> FindPackageReferencersForAsset(const FString& AssetPath, bool bLoadAssetsToConfirm = false);

for (const FAssetData& SelectedAssetData : SelectedAssetsData) 是一个范围循环(range-based for loop),通常在 Unreal Engine 中用于遍历一个容器中的所有元素。

: 在 for 循环中的用法是用于范围循环(range-based for loop)的语法符号。“在”或者“属于”

ObjectTools.h中的非强制删除。可以让使用者有一个确认删除的机会。

UNREALED_API int32 DeleteAssets( const TArray<FAssetData>& AssetsToDelete, bool bShowConfirmation = true );

如下报错(unresolved external symbal) means we need to add module to Build.cs file

UnrealEd means Unreal Editor

		PublicDependencyModuleNames.AddRange(
			new string[]
			{
				"Core","Blutility","EditorScriptingUtilities","UMG","Niagara","UnrealEd"
				// ... add other public dependencies that you statically link with here ...
			}
			);

示例代码

	UFUNCTION(CallInEditor)
	void RemoveUnusedAssets();
// Fill out your copyright notice in the Description page of Project Settings.


#include "AssetAction/QuickAssetAction.h"
#include "DebugHeader.h"
#include "EditorUtilityLibrary.h"
#include "EditorAssetLibrary.h"
#include "ObjectTools.h" //新增


void UQuickAssetAction::RemoveUnusedAssets()
{
	TArray<FAssetData> SelectedAssetsData = UEditorUtilityLibrary::GetSelectedAssetData();
	TArray<FAssetData> UnusedAssetsData;

	for (const FAssetData& SelectedAssetData : SelectedAssetsData) 
	{
		TArray<FString> AssetReferencers =
			UEditorAssetLibrary::FindPackageReferencersForAsset(SelectedAssetData.ObjectPath.ToString());

		if (AssetReferencers.Num() == 0) {
			UnusedAssetsData.Add(SelectedAssetData);
		}//把它加入废物列表
	}

	if (UnusedAssetsData.Num() == 0) {
		ShowMsgDialog(EAppMsgType::Ok, TEXT("No unused asset found among selected assets"), false);
		return;
	}

	else {
		const int32 NumOfAssetsDeleted = ObjectTools::DeleteAssets(UnusedAssetsData);//执行删除
		ShowNotifyInfo(TEXT("Successfully deleted " + FString::FromInt(NumOfAssetsDeleted) + TEXT(" unused assets.")));
	}

	//const int32 NumOfAssetDeleted = ObjectTools::DeleteAssets(UnusedAssetsData);//执行删除
	//if (NumOfAssetDeleted == 0)return;
	//ShowNotifyInfo(TEXT("Successfully deleted " + FString::FromInt(NumOfAssetsDeleted) + TEXT(" unused assets.")));
}



可读性:可以考虑将未使用资产的查找和删除逻辑分成两个独立的函数

插件效果

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

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

相关文章

wpf在图上画矩形,矩形可拖动、大小可调节,使用装饰器Adorner调整矩形大小,限制拖动和调节范围

效果 功能 使用wpf实现 在图片上画一个矩形框该矩形框可以调节大小该矩形框可以拖动调整位置 注&#xff1a;这里的鼠标事件是&#xff0c;双击在图上画一个固定大小的矩形框&#xff0c;右键按住拖动矩形框。有需要的可以自行调整对应的鼠标事件 参考资料&#xff1a;https…

心理测试小程序开发心理健康MBTI人格测试,小程序源码部署支持多种流量主

简介 在当今这个高速运转的社会里&#xff0c;个人内心性格与心理健康日益成为人们关注的焦点。随着科技的日新月异&#xff0c;心理评估的方式正经历着深刻的变革&#xff0c;从传统的面对面咨询室中解放出来&#xff0c;无缝融入了我们日常使用的移动设备之中。这一趋势极大…

【网络安全】网络基础第一阶段——第四节:网络协议基础---- VRRP与网络架构设计

目录 一、VRRP 1.1 VRRP使用场景及简介 1.2 VRRP基本原理 1.2.1 VRRP基本结构 1.2.2 设备类型 1.2.3 VRRP工作原理 1.3 VRRP的基本配置 1.3.1 基于三层交换机的VRRP组配置 1.3.2 SMTPVRRP经典组网 1.4 端口聚合 1.4.1 端口聚合技术 1.4.2 聚合模式 1.4.3 Eth-trun…

Python项目Flask框架整合Redis

一、在配置文件中创建Redis连接信息 二、 实现Redis配置类 import redis from config.config import REDIS_HOST, REDIS_PORT, REDIS_PASSWD, REDIS_DB, EXPIRE_TIMEclass RedisDb():def __init__(self, REDIS_HOST, REDIS_PORT, REDIS_DB, EXPIRE_TIME, REDIS_PASSWD):# 建立…

【笔记】KaiOS 系统框架和应用结构(APP界面逻辑)

KaiOS系统框架 最早自下而上分成Gonk-Gecko-Gaia层,代码有同名的目录,现在已经不用这种称呼。 按照官网3.0的版本迭代介绍,2.5->3.0已经将系统更新成如下部分: 仅分为上层web应用和底层平台核心,通过WebAPIs连接上下层,这也是kaios系统升级变更较大的部分。 KaiOS P…

Spring Boot 点餐系统:您的餐饮技术伙伴

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于网上点餐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了网上点餐系统&#xff0c;它彻底改变了过去传统的…

Spring不能处理的循环依赖

文章目录 场景一&#xff1a;prototype 类型的循环依赖场景二&#xff1a; constructor 注入的循环依赖场景三&#xff1a;普通的 AOP 代理 Bean 的循环依赖–默认是可以的场景四&#xff1a;Async 增强的 Bean 的循环依赖总结 参考&#xff1a;https://blog.csdn.net/wang4896…

Redis系列补充:聊聊布隆过滤器(go语言实践篇)

1 介绍 布隆过滤器&#xff08;Bloom Filter&#xff09;是 Redis 4.0 版本之后提供的新功能&#xff0c;我们一般将它当做插件加载到 Redis Service服务器中&#xff0c;给 Redis 提供强大的滤重功能。 它是一种概率性数据结构&#xff0c;可用于判断一个元素是否存在于一个集…

Elasticsearch导出导入数据

1.概念回顾 2.基础操作 展示详细信息 GET&#xff1a;http://127.0.0.1:9200/_cat/indices?v Java代码将文件导入到ES package com.Graph.medicalgraph;import org.apache.http.HttpHost; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.act…

Java中的位图和布隆过滤器(如果想知道Java中有关位图和布隆过滤器的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习之前的数据结构的时候&#xff0c;我们使用的数据量都不是很大&#xff0c;但是在生活中&#xff0c;我们常常面临着要处理大量数据结果并得出最终结果&#xff0c;那么有没有什么数据结构可以帮助我们实现这样的功能呢&#xff1f; ✨✨✨这里是秋刀鱼不…

Circular dependency between the following tasks(gradle循环依赖的问题)

简介 目前公司项目主要使用gradle而不是maven&#xff0c;所以对gradle的使用不是很清楚&#xff0c;遇到这个问题的时候一直在晚上查资料&#xff0c;但是解决方案基本都是安卓的&#xff0c;后续先前辈请教了一下&#xff0c;才找到解决方案。 问题解析 本质上就是两个模块…

【QT 5 调试软件+Linux下调用脚本shell-无法调度+目录拼写+无法找目录+sudo权限(2)+问题解决方式+后续补充】

【QT 5 调试软件Linux下调用脚本shell-无法调度目录拼写无法找目录sudo权限&#xff08;2&#xff09;问题解决方式后续补充】 1、前言2、问题综述&#xff1a;自研qt上位机无法调度脚本&#xff08;1&#xff09;可能原因1&#xff1a;无法找到目录情况说明&#xff1a;解决思…

程序人生:软件测试 非技术性面试题【建议每个测试人观看】

1、自我介绍&#xff1a;三分钟左右 2、为什么从郑州/太原离职&#xff1f; 3、你的职业规划是什么样的&#xff1f; 4、对下一家公司有什么自己的想法吗&#xff1f; 5、你觉得作为一名测试工程师&#xff0c;应该具备什么样的素养&#xff1f; 6、你觉得管理层&#xff…

HTML | 外部引入 CSS 的2种方式:link和@import有什么区别?

外部引入 CSS 有2种方式&#xff0c;link 和 import。就结论而言&#xff0c;强烈建议使用 link &#xff0c;慎用 import 方式。 两者都是外部引用 CSS 的方式&#xff0c;但是存在一定的区别&#xff1a; &#xff08;1&#xff09;从属关系区别 link是HTML / XHTML标签&a…

react crash course 2024(3) jsx语法及组件

创建组件的文件结构 rafce创建组件内容 const NavBar () > {return (<div>NavBar</div>) }export default NavBar 使用该组件 组件传值 或者把props解构 设置默认值 5.用自定义组件包裹一些元素 把他们传值 元素直接变成了参数被传进来

求推荐网站建设公司?2024网站建设公司哪家好TOP3

好的网站建设公司在这个信息时代寻找起来会比较困难&#xff0c;因为你在任何一个搜索引擎搜索“网站建设”这个关键词&#xff0c;平台会给你推送成千上万家的建站公司&#xff0c;让人看得眼花缭乱&#xff0c;但究竟哪个更好&#xff0c;让人捉摸不透。 前段时间&#xff0…

多城联动、多形式开展网安周公益活动,开源网安传播网络安全知识

9月9日至15日&#xff0c;以“网络安全为人民&#xff0c;网络安全靠人民”为主题的2024年国家网络安全宣传周将在全国范围内统一开展&#xff0c;通过多样的形式、丰富的内容&#xff0c;助力全社会网络安全意识和防护技能提升。开源网安今年继续为各地企业、群众带来了丰富的…

Qt QFileDialog使用方法

头文件 #include <QFileDialog> 成员名称返回值说明getExistingDirectoryQString返回用户选中的文件夹路径getExistingDirectoryUrlQUrl与QFileDialog::getExistingDirectory()的主要区别来自于为用户提供的选择远程目录的能力getOpenFileNameQString返回用户选中的文件…

从更底层的角度理解网站的访问过程

文章目录 1.示例&#xff0c;访问www.baidu.com是如何返回数据的1.输入www.baidu.com回车2.检查本机的C:\Windows\System32\drivers\etc\hosts配置文件夹下有没有这个域名对应的映射&#xff1a; 1.示例&#xff0c;访问www.baidu.com是如何返回数据的 1.输入www.baidu.com回车…

18.2 k8s-apiserver监控源码解读

本节重点介绍 : k8s代码库和模块地址 下载 apiserver源码 apiserver中监控源码阅读 k8s源码地址分布 k8s代码库 访问github上k8s仓库&#xff0c;readme中给出了k8s 模块的代码地址举例图片 组件仓库列表 地址 Repositories currently staged here: k8s.io/apik8s.io/a…