UE5 查找资源时可以用FARFilter进行筛选,之前可以用ClassNames进行筛选,但是5.1之后就弃用这个属性改成ClassPaths属性
构造一个FTopLevelAssetPath对象需要两个FName参数,但是没找到应该传什么
查找官方文档,明显是错误的,还是得自己动手丰衣足食
随便获取一个Texture类型的资源打断点查看资源发现FAssetData类中的AssetClassPath属性就是FTopLevelAssetPath类型,因此这就和前面FARFilter类中的ClassPaths属性对应上
还有一个比较简单的方法,选中资源右键Copy Reference
复制出来的路径就是 /Script/Engine.World'/Game/Untitled.Untitled' /Script/Engine
就是PackageName,World就是AssetName,其他资源同理可得,因此就可以通过筛选路径以及资源类型获取想要的资源
.hpublic:UFUNCTION(BlueprintCallable, Category = "Texture Utilities")void PrintTextureNames(const FString& SearchPath);
.cpp#include "AssetRegistry/AssetRegistryModule.h"void UFunTool_GI::PrintTextureNames(const FString& SearchPath)
{// 获取资产注册模块FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry");// 创建一个资产过滤器 AssetClassPath = {PackageName="/Script/Engine" AssetName="Texture2D" }FARFilter Filter;Filter.bRecursivePaths = true;Filter.ClassPaths.Add(FTopLevelAssetPath("/Script/Engine", "Texture2D"));Filter.PackagePaths.Add(FName(*SearchPath));// 用于存放结果的数组TArray<FAssetData> AssetDatas;AssetRegistryModule.Get().GetAssets(Filter, AssetDatas);// 遍历所有找到的资产数据for (const FAssetData& AssetData : AssetDatas){// 打印资产的名称UE_LOG(LogTemp, Log, TEXT("Found Texture: %s"), *AssetData.AssetName.ToString());}
}
注意Path不要添加双引号不然会出问题,因为FString类型会自动加双引号
运行结果: