(UE4 4.20)UE4获取所有特定资源(FAssetData)的资源路径

UE4开发偶尔会碰到特殊的需求,得获取整个项目中某种特定格式资源的所有路径,如 mesh 又或者 particleSystem,如下所示

 

UE4筛选某类资源(FAssetData)的资源路径有两种方法:

UObjectLibrary和FAssetRegistryModule,FARFilter

 

UObjectLibrary

想筛选Content文件夹下static mesh类资源的所有路径,代码如下:

	UObjectLibrary* objectLibrary = UObjectLibrary::CreateLibrary(UStaticMesh::StaticClass(), false, GIsEditor);
	if (objectLibrary)
	{
		objectLibrary->AddToRoot();
	}
	
	objectLibrary->LoadAssetDataFromPath(TEXT("/Game"));
	TArray<FAssetData> arrayAssetData;
	objectLibrary->GetAssetDataList(arrayAssetData);

	for (int32 index = 0; index < arrayAssetData.Num(); ++index)
	{
		UE_LOG(LogTemp, Error, TEXT("%s"), *arrayAssetData[index].ObjectPath.ToString());
	}

大概就是利用UObjectLibrary和FAssetData两个关键结构。

运行结果,筛选所有staticmesh资源的所有路径

FAssetRegistryModule,FARFilter

	TArray<FAssetData> arrayAssetData;
	FAssetRegistryModule& assetRegistryModule = FModuleManager::GetModuleChecked<FAssetRegistryModule>("AssetRegistry");
	FARFilter filter;
	filter.PackagePaths.Add("/Game");
	filter.ClassNames.Add(UStaticMesh::StaticClass()->GetFName());
	filter.ClassNames.Add(UTexture::StaticClass()->GetFName());
	filter.bRecursivePaths = true;
	filter.bRecursiveClasses = true;
	assetRegistryModule.Get().GetAssets(filter, arrayAssetData);
	

	for (int index = 0; index < arrayAssetData.Num(); ++index)
	{
		UE_LOG(LogTemp, Warning, TEXT("asset name is %s"), *arrayAssetData[index].GetFullName());
	}

 

UObjectLibrary 和 FAssetRegistryModule,FARFilter区别

UObjectLibrary加载了相应的所有资源进了内存,可以用FSoftObjectPtr检测下,发现用UObjectLibrary获取资源路径的同时也加载相应的资源为UObject; 而FAssetRegistryModule,FARFilter仅仅是获取资源的路径,相应的资源并没有被加载为UObject.

参考资料:

【1】 http://api.unrealengine.com/CHN/Programming/Assets/AsyncLoading/index.html

【2】Source\Runtime\AssetRegistry\Private\AssetRegistry.cpp

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值