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

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

删除无用的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.kler.cn/a/320500.html

相关文章:

  • django——创建 Django 项目和 APP
  • WebSocket实战,后台修改订单状态,前台实现数据变更,提供前端和后端多种语言
  • ArcGIS Pro ADCore DAML
  • 香港站群服务器有助于提升网站在搜索引擎中的排名
  • Python中的with语句
  • 【爬虫实战】抓取某站评论
  • 神经网络(五):U2Net图像分割网络
  • python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)
  • MySQL --数据类型
  • 生成PPT时支持上传本地的PPT模板了!
  • 【从0开始自动驾驶】用python做一个简单的自动驾驶仿真可视化界面
  • Stable Diffusion 使用详解(11)--- 场景ICON制作
  • 逆向推理+ChatGPT,让论文更具说服力
  • eclipse git 不小心点了igore,文件如何加到git中去。
  • CentOS下安装Kibana(保姆级教程)
  • TypeScript 设计模式之【装饰模式】
  • ArrayList 与 LinkedList 的区别?
  • fastzdp_redis第一次开发, 2024年9月26日, Python操作Redis零基础快速入门
  • Linux标准IO(三)-格式化I/O输出
  • SpringBoot集成阿里easyexcel(一)基础导入导出
  • 使用爬虫编写一个挖掘更多关键词的脚本
  • 在深度学习中,是否应该打破正负样本1:1的迷信思想?
  • 戴尔笔记本电脑——重装系统
  • 安卓桌面Launcher负一屏如何实现各种方案比较设计
  • RNN模型学习
  • Kotlin Android 环境搭建