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類型會自動加雙引號

運行結果:
