マテリアルパラメータコレクションの特定の項目を参照しているマテリアルの検出

Material Parameter Collection の特定のパラメータ​を削除した場合、そのパラメータを参照しているマテリアルを次回開いたときにエラーが検出されると思います。(MPC からパラメータを削除した時点では、それを参照しているマテリアルのエラーはエクスポートされません。)

現時点では参照ビューア(または python )等で MPC を参照しているマテリアルを​特定&列挙し、それを開いてどのパラメータを参照しているか確認する必要があると思います。

マテリアルに含まれる Material Function 内で MPC のパラメータを参照している場合その expression は検出されない(もしくは、そもそも python から expression を参照するためのメソッドが用意されない)等の問題があると思います。

エディタのツール →​ 検索にパラメータを入力すると参照している BP は検出できますが、マテリアルのほうは検出されません。

MPC の特定のパラメータを参照しているマテリアルを列挙する方法はございますでしょうか?​

[Attachment Removed]

リファレンスビューアや IAssetRegistry::GetAssetsByPackageNameでの参照元の列挙では、MaterialFunctionの中にMFCへのアクセスノードを持ったマテリアルも列挙されます。

さらにマテリアルがMPCのどのパラメータを参照しているのかは​ UMaterial::GetAllExpressionsInMaterialAndFunctionsOfType でUMaterialExpressionCollectionParameterノードを列挙することで実現できます。この関数はUFucntionとして公開されていないので以下例のような関数を自作して公開することでお望みの出力がえられると思います。

void UMyMaterialFunctionLibrary::LogAllMaterialCollectionParameterReference(UMaterial* InMaterial) 
{
    // MPC参照ノードを列挙して 参照アセットとパラメータ名をログ出力
    TArray< const UMaterialExpressionCollectionParameter*>   Expressions;
    InMaterial->GetAllExpressionsInMaterialAndFunctionsOfType(Expressions);
    for(const UMaterialExpressionCollectionParameter *Expression : Expressions )
    {
        UE_LOG(LogTemp, Display, TEXT("MPC:%s ParameterName:%s"), *Expression->Collection->GetName(), *Expression->ParameterName.ToString());
    }
 
}

[Attachment Removed]

Epic Games Japan [Suzuki [Content removed] 様

ご教示ありがとうございます。

求めていた処理を確認できました。​

ありがとうございました。​

[Attachment Removed]