Summary
-------
Opening a Proxy Table asset (UProxyTable) that contains a hard-reference “Asset”
row result reliably trips an ensure in the Property Editor:
Ensure condition failed: GetFilterFunction
[SPropertyEditorAsset.cpp:605]
Could not find UFunction ResultAssetFilter on [ProxyTableAssetName]
The editor continues afterward (the ensure is non-fatal), but it breaks into the
debugger every fresh session and spams the log. The asset picker for that row
silently falls back to unfiltered.
Engine version
--------------
UE 5.7 (//UE5/Release-5.7). Reproduces on the stock, unmodified Chooser /
ProxyTable experimental plugin - the relevant files
(ObjectChooser_Asset.h, Chooser.h, SPropertyEditorAsset.cpp) are unchanged from
Epic’s source in our integration. We are a licensee fork
(local build version 5.7.4) but none of our changes touch this path.
Root cause
----------
FAssetChooser declares its asset property with a metadata filter hook:
// Engine/Plugins/Chooser/Source/Chooser/Internal/ObjectChooser_Asset.h:24
UPROPERTY(EditAnywhere, Category = “Parameters”,
meta \= (GetAssetFilter\="ResultAssetFilter"))
TObjectPtr<UObject> Asset;
SPropertyEditorAsset resolves that filter by calling FindFunction on the
property’s outer object:
// Engine/Source/Editor/…/SPropertyEditorAsset.cpp:~603-605
const UFunction* GetFilterFunction = Object->FindFunction(*GetFilterFunctionName);
ensureMsgf(GetFilterFunction, TEXT(“Could not find UFunction %s on %s”),
\*GetFilterFunctionName, \*GetNameSafe(Object));
ResultAssetFilter is implemented only on UChooserTable:
// Engine/Plugins/Chooser/Source/Chooser/Internal/Chooser.h:184
UFUNCTION()
CHOOSER_API bool ResultAssetFilter(const FAssetData& AssetData);
FAssetChooser is reused as a row result inside UProxyTable as well as inside
UChooserTable. When the outer is a UChooserTable the lookup succeeds. When the
outer is a UProxyTable - which has no ResultAssetFilter UFUNCTION - FindFunction
returns null and the ensure fires.
Note: only the hard-reference FAssetChooser carries this meta; the soft variant
FSoftAssetChooser (ObjectChooser_Asset.h:42) does not, so soft-reference rows do
not trigger it.
Impact
------
- Non-fatal, but breaks into the debugger every session and logs an error.
- The asset picker for proxy-table asset rows is effectively unfiltered (the
intended type filtering from ResultAssetFilter does not run for proxy tables).
---
NOTE: I am able to repro this issue 100% of the time on my local machine with no confounding local changes. However, the colleagues I’ve spoken to do not experience this error in our testing.