【UE】判断一个Package是否是重定向器
判断一个Package是否是重定向器
最近在做一个构建需求的时候,需要处理重定向器的问题
一开始用 UEditorAssetLibrary::LoadAsset
加载出来判断,但是无法处理umap
之后改用 AssetRegistry
扫出来判断类型,效率也还行,在此做一下记录
构造出一个umap的重定向器来实验
C++实现
bool UBlueprintFunctionLibraryExtend::IsPackageRedirector(const FString& PackageName)
{FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry");IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();FString PackagePath = FPaths::GetPath(PackageName);FString AssetName = FPaths::GetBaseFilename(PackageName);TArray<FAssetData> AssetDatas;AssetRegistry.GetAssetsByPath(FName(*PackagePath), AssetDatas, false);for (const FAssetData& AssetData : AssetDatas){if (AssetData.AssetName.ToString() == AssetName){return AssetData.AssetClass == FName(TEXT("ObjectRedirector"));}}UE_LOG(LogTemp, Error, TEXT("[Error] Can't find asset data for `%s`."), *PackageName);return false;
}
Python实现
import os
import unrealasset_registry = None
def is_package_redirector(package_name) -> bool:"""判断一个Package Name指向的资产是否是重定向器Args:package_name (str): 资产Package名Returns:bool: package_name指向的资产是否是重定向器"""global asset_registryif asset_registry is None:asset_registry = unreal.AssetRegistryHelpers.get_asset_registry()asset_name = os.path.basename(package_name)for asset_data in asset_registry.get_assets_by_path(os.path.dirname(package_name), recursive=False):asset_data: unreal.AssetDataif asset_data.asset_name == asset_name:return asset_data.asset_class == "ObjectRedirector"unreal.log_error(f"[Error] Can`t find asset data for `{package_name}`.")return False