岳阳二手房网站,帮企业外卖网站做推,家具营销型网站,文旅策划公司目录 需要考虑的问题
重定向的修复函数
代码#xff1a;
删除无引用资产
代码
需要添加的头文件和模块 在我们删除资产的时候#xff0c;会发现#xff0c;有些资产在删除的时候会出现有被什么什么引用#xff0c;还有的是没有被引用。
而我们如果直接选择一片去进行…目录 需要考虑的问题
重定向的修复函数
代码
删除无引用资产
代码
需要添加的头文件和模块 在我们删除资产的时候会发现有些资产在删除的时候会出现有被什么什么引用还有的是没有被引用。
而我们如果直接选择一片去进行删除的话那么会导致看到很多有引用和没有引用的出现。
现在我们需要将没有引用的全部删除而有引用的全部留下做一个脚本化资产行为。 需要考虑的问题
1.首先我们会选择一堆资产如何从资产中找到没有被引用的资产然后进行删除。
2.我们要考虑到假如资产迁移后没有修复重定向的情况所以要在删除无引用资产前需要对重定向器进行全局的一个修复。
3.模块问题我们修复重定向器的时候肯定会访问各种各样不同的模块而对此我们需要进行一个添加。
重定向的修复函数
首先我们做一个函数这个函数的作用就是在删除资产之前对全局进行一个重定向器的修复以防止不小心删除了没有修复重定向器的有引用资产。
所以这个函数我决定放在private里面使用。
代码
private://修复重定向器void FixUpRedirectors();
首先是加载AssetRegistry模块然后创建一个过滤器并对其中进行设置。
之后将通过这个遍历器的资产放入数组中去再继续遍历然后再继续获取指定过滤条件的资产信息。
将其中加入到需要修复的数组中去。
继续加载模块。
最后进行修复。
FAssetRegistryModule模块AssetRegistry模块用于管理项目中的资产信息包括资产的元数据、引用关系、依赖关系等。它的主要作用是提供对项目中的资产进行查询和操作的接口。
FAssetToolsModule模块AssetTools模块用于执行与资产操作相关的功能如创建、删除、重命名等。它提供了一系列的方法来管理项目中的资产。
void UQuicklyAssetAction::FixUpRedirectors()
{TArrayUObjectRedirector* RedirectorsToFixArray;//加载AssetRegistry模块FAssetRegistryModule AssetRegistryModule FModuleManager::Get().LoadModuleCheckedFAssetRegistryModule(TEXT(AssetRegistry));//创建过滤器FARFilter Filter;Filter.bRecursivePaths true;//遍历子文件Filter.PackagePaths.Emplace(/Game);//遍历 /Game 目录下的文件Filter.ClassNames.Emplace(ObjectRedirector);//类名为 ObjectRedirector 的文件//获取满足条件的文件到OutRedirectors中TArrayFAssetData OutRedirectors;AssetRegistryModule.Get().GetAssets(Filter, OutRedirectors);//将满足条件的文件添加到 RedirectorsToFixArray 数组中for (const FAssetData RedirectorData:OutRedirectors){if (UObjectRedirector* RedirectorToFixCastUObjectRedirector(RedirectorData.GetAsset())){RedirectorsToFixArray.Add(RedirectorToFix);}}//加载 AssetTools 模块FAssetToolsModule AssetToolsModule FModuleManager::LoadModuleCheckedFAssetToolsModule(TEXT(AssetTools));//修复重定向器AssetToolsModule.Get().FixupReferencers(RedirectorsToFixArray);
}删除无引用资产
在完成了修复重定向的函数后我们来进行真正的无引用资产的删除函数制作
其实其中的方法很简单主要的功能和前面两章大差不差只不过添加了对资产重定向的修复。
代码
void UQuicklyAssetAction::RemoveNoRefAsset()
{TArrayFAssetData SelectedAssetsData UEditorUtilityLibrary::GetSelectedAssetData();TArrayFAssetData NoRefAssetData;//修复重定向器FixUpRedirectors();for (const FAssetData SelectedAssetDate:SelectedAssetsData){//输入资产的路径获取对资产的引用,保存在数组里面TArrayFString 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 (DeleteAssetNum0){ShowNotifyInfo(Description The asset referenced by 0 is deleted successfully. A total of FString::FromInt(DeleteAssetNum) files are deleted., 7);}
}
需要添加的头文件和模块