アニメーションエディターのアセットブラウザにあるフォルダフィルターが動作しない

お世話になっております。

アニメーションエディターのアセットブラウザ内に存在するフォルダーフィルターなのですが、現状動作していないようです。

こちらですが、少しデバッグしたところフォルダを設定するときのアセットピッカーのフォルダパスと、コンテンツブラウザ内のパスが一致しておらず正しくフィルターできていないようでした。

Engine\Source\Editor\Persona\Private\SAnimationSequenceBrowser.cpp

`TSharedRef<FFrontendFilter_Folder> FolderFilter = MakeShared<FFrontendFilter_Folder>(FolderCategory, FilterIndex,
FSimpleDelegate::CreateLambda(this
{
Filter.PackagePaths.Empty();

for(TSharedPtr<FFrontendFilter_Folder> CurrentFolderFilter : FolderFilters)
{
if(CurrentFolderFilter->bEnabled)
{
#if 1 // mod here
FString NewPath(*CurrentFolderFilter->Folder);
if(NewPath.Len() > 0 && NewPath[0] == TEXT(‘/’) && !NewPath.StartsWith(TEXT(“/All”)))
{
NewPath.InsertAt(0, TEXT(“/All”));
}
Filter.PackagePaths.Add(*NewPath);
#else
Filter.PackagePaths.Add(*CurrentFolderFilter->Folder);
#endif // mod end
}
}

SetFilterDelegate.ExecuteIfBound(Filter);
}));`​

アセットピッカーで取得したパスは/Gameからのパスなのですが、コンテンツブラウザ内では/Allから始まるパスになっているので、追加するようにしてみたら動作しました。

ただ、/Allの扱いに関して正直どのような形が正しいのかわからないので、正式な対応をお願いします。もしピッカー時に/Allから始まるパスを取得するようにするのが正しいのでしたら、FFrontendFilter_FolderのFPathPickerConfigあたりの設定で正しいパスを取得できるようになるのかもしれないのですが、細かい部分まではわかりませんでした。

ご確認の方よろしくお願いいたします。​

再現手順

お世話になっております。

ご指摘の通り、アニメーションエディターのアセットブラウザにあるフォルダフィルターが正しく動作していないのは、フォルダパスの形式が一致していないことが原因です。アセットピッカーでは/Gameから始まるパスが返されますが、フィルター側では/Allから始まるパスを期待しています。そのため、正しくフィルターが適用されない状況になっています。/Allを手動でパスに挿入するという回避策は、確かに動作させるためには有効で、良い着眼点です。

ただし、この方法は恒久的な対応としては適切ではなく、他の部分で不整合を引き起こす可能性があります。

正しい対応としては、アセットピッカー(FPathPickerConfig)の設定を見直し、フィルターシステムが期待する形式、つまり/Allをルートとするパスを返すように調整することです。

これにより、パスの書き換えを行わずに、フィルターが正しく機能するようになります。

現在のアセットピッカーの設定を確認し、必要に応じて修正を行います。

それにより、フォルダフィルターが意図通りに動作するようになります。

ご報告ありがとうございました。今後のリリースに向けて調整するかどうか担当者に聞いてみます。

ご確認ありがとうございます。

自分の方でも引き続き調べて/AllがVirtualPathという扱いになっていることを理解しました。

​ですので、FFrontendFilter_Folder::ModifyContextMenu()内のFPathPickerConfigに

> PathPickerConfig.bOnPathSelectedPassesVirtualPaths = true;

を設定することでフォルダフィルターを動作するように変更できました。

​将来的にも対応の方よろしくお願いいたします。​

なお、自前での変換時はUContentBrowserDataSubsystem::ConvertInternalPathToVirtual(()を使うのが正しいようですね。

お世話になっております。

解決できてよかったです!

こちらの情報をまとめて担当者に伝えときます!!

引き続きよろしくお願いします。