// Portage UE 5.5 (2026.9 beta) - voir LPAssetRegistryHelpers.h #include "LPAssetRegistryHelpers.h" #include "AssetRegistry/AssetRegistryModule.h" #include "AssetRegistry/IAssetRegistry.h" #include "Modules/ModuleManager.h" FAssetData ULPAssetRegistryHelpers::GetAssetByObjectPath(const FName ObjectPath, bool bIncludeOnlyOnDiskAssets) { const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked(TEXT("AssetRegistry")); // 5.1+ : la surcharge prenant un FName est depreciee. La broche Blueprint reste un // FName (les noeuds rebranches par la commandlet en dependent), seule la conversion // vers FSoftObjectPath est faite ici. const FSoftObjectPath Path(ObjectPath.ToString()); const FAssetData Result = AssetRegistryModule.Get().GetAssetByObjectPath(Path, bIncludeOnlyOnDiskAssets); // Diagnostic du 2026-09-08 : cette fonction a ete instrumentee pour verifier qu'elle // n'etait pas en cause dans l'absence de maillage des personnages. Elle ne l'etait pas // (2720 resolutions reussies sur 2776). Le defaut venait de GetAssetsByClass, ci-dessous. return Result; } bool ULPAssetRegistryHelpers::GetAssetsByClassName(FName ClassName, TArray& OutAssetData, bool bSearchSubClasses) { OutAssetData.Reset(); if (ClassName.IsNone()) { return false; } // TryFindTypeSlow resout un nom court ("SkeletalMesh") vers la classe reelle, quel que // soit son module : /Script/Engine.SkeletalMesh comme /Script/StreetMapRuntime.StreetMap. const UClass* ResolvedClass = UClass::TryFindTypeSlow(ClassName.ToString()); if (!ResolvedClass) { UE_LOG(LogTemp, Warning, TEXT("LPAssetRegistryHelpers : classe '%s' introuvable."), *ClassName.ToString()); return false; } const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked(TEXT("AssetRegistry")); return AssetRegistryModule.Get().GetAssetsByClass( FTopLevelAssetPath(ResolvedClass), OutAssetData, bSearchSubClasses); } FName ULPAssetRegistryHelpers::GetAssetObjectPath(const FAssetData& AssetData) { if (!AssetData.IsValid()) { return NAME_None; } return FName(*AssetData.GetSoftObjectPath().ToString()); }