// Portage UE 5.5 (2026.9 beta) - rustine introduite lors du portage 4.27, toujours necessaire. // // Epic a rendu IAssetRegistry::GetAssetByObjectPath impur (BlueprintPure=false) apres la // version d'Unreal utilisee pour ecrire les Blueprints du jeu. Les graphes existants // l'employaient comme noeud PUR : au chargement le noeud gagne une broche Exec non // connectee, il est donc elague, et le noeud "Get Asset" qui consommait sa sortie se retrouve // sans entree -> "'In Asset Data' ... must have an input wired into it". // // Cette classe re-expose la meme fonction en version PURE. La commandlet // LPFixAssetRegistryNodes (module LifePlayEditorTools) fait pointer les noeuds existants ici. #pragma once #include "CoreMinimal.h" #include "AssetRegistry/AssetData.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "LPAssetRegistryHelpers.generated.h" UCLASS() class LIFEPLAY_API ULPAssetRegistryHelpers : public UBlueprintFunctionLibrary { GENERATED_BODY() public: /** * Version PURE de IAssetRegistry::GetAssetByObjectPath. * * @param ObjectPath chemin de l'objet a chercher * @param bIncludeOnlyOnDiskAssets si vrai, ignore les objets deja en memoire (plus rapide) * @return les donnees de l'asset ; invalides si l'objet est introuvable */ UFUNCTION(BlueprintPure, Category = "AssetRegistry") static FAssetData GetAssetByObjectPath(const FName ObjectPath, bool bIncludeOnlyOnDiskAssets = false); /** * Version FName de IAssetRegistry::GetAssetsByClass. * * 5.1 a remplace le parametre FName ClassName par un FTopLevelAssetPath ClassPathName. * La montee de version a supprime l'ancienne broche des noeuds existants SANS reporter * sa valeur sur la nouvelle : les trois appels de GI (SkeletalMesh, StaticMesh, * StreetMap) interrogeaient donc l'AssetRegistry avec un chemin de classe VIDE et ne * renvoyaient plus rien. Le jeu ne pouvait plus enumerer ni corps, ni vetements, ni * coiffures : generatePerson() sans argument n'avait plus rien a tirer au sort. * * Rien dans le graphe ne le signalait : la compilation restait a zero erreur. * * Les noms de broches reproduisent ceux du noeud d'origine pour que le reaiguillage se * limite a un changement de reference de fonction. */ UFUNCTION(BlueprintCallable, Category = "AssetRegistry") static bool GetAssetsByClassName(FName ClassName, TArray& OutAssetData, bool bSearchSubClasses = false); /** * Equivalent de l'ancien FAssetData::ObjectPath (supprime en 5.1 au profit de * FSoftObjectPath). Rend le chemin sous la forme "/Game/Dossier/Asset.Asset" attendue * par les consommateurs existants. */ UFUNCTION(BlueprintPure, Category = "AssetRegistry") static FName GetAssetObjectPath(const FAssetData& AssetData); };