Description

There is an issue when setting a Static Mesh inside a blueprint that it is referenced by another blueprint with more than one child actor.

An ensure is triggered inside the engine, and there is a dev comment that indicates that the code should never reach this point.

The ensure hits during rerunning of the construction script of the blueprint with the child actor components, due to UStaticMeshComponent::PostEditChangeProperty not yet having ran on the second instance of the same child actor type.

Steps to Reproduce

1- Open an Unreal Engine project
2- Create two blueprint actors BP_A & BP_B
3- In BP_A, create a static mesh component but don't set it to any mesh
4- In BP_B, create two child actor components, and point both of them to the BP_A
5- Return to BP_A and set a static mesh inside the static meshc omponent.
6- An ensure would be triggered

Callstack

??R<lambda_1>@?1??OutdatedKnownStaticMeshDetected@UStaticMeshComponent@@AEBAXXZ@QEBA@XZ() StaticMeshComponent.cpp:740
[Inlined] UStaticMeshComponent::OutdatedKnownStaticMeshDetected() StaticMeshComponent.cpp:740
UStaticMeshComponent::GetStaticMesh() StaticMeshComponent.h:423
FStaticMeshComponentInstanceData::FStaticMeshComponentInstanceData(const UStaticMeshComponent *) StaticMeshComponent.cpp:66
[Inlined] TStructOnScope::InitializeAs(const UStaticMeshComponent *&&) StructOnScope.h:185
[Inlined] MakeStructOnScope(const UStaticMeshComponent *&&) StructOnScope.h:376
UStaticMeshComponent::GetComponentInstanceData() StaticMeshComponent.cpp:2984
FComponentInstanceDataCache::FComponentInstanceDataCache(const AActor *) ComponentInstanceDataCache.cpp:603
[Inlined] SharedPointerInternals::TIntrusiveReferenceController<FComponentInstanceDataCache,1>::

{ctor}

(AActor *&) SharedPointerInternals.h:414
[Inlined] SharedPointerInternals::NewIntrusiveReferenceController(AActor *&) SharedPointerInternals.h:465
[Inlined] MakeShared(AActor *&) SharedPointer.h:2252
FChildActorComponentInstanceData::FChildActorComponentInstanceData(const UChildActorComponent *) ChildActorComponent.cpp:382
[Inlined] TStructOnScope::InitializeAs(const UChildActorComponent *&&) StructOnScope.h:185
UChildActorComponent::GetComponentInstanceData() ChildActorComponent.cpp:465
FComponentInstanceDataCache::FComponentInstanceDataCache(const AActor *) ComponentInstanceDataCache.cpp:603
[Inlined] FActorTransactionAnnotation::Create(const AActor *, const bool) ActorEditor.cpp:426
AActor::RerunConstructionScripts() ActorConstruction.cpp:369
AActor::RerunConstructionScripts() ActorConstruction.cpp:284
UActorComponent::ConsolidatedPostEditChange(const FPropertyChangedEvent &) ActorComponent.cpp:1060
USceneComponent::PostEditChangeProperty(FPropertyChangedEvent &) SceneComponent.cpp:628
UPrimitiveComponent::PostEditChangeProperty(FPropertyChangedEvent &) PrimitiveComponent.cpp:1273
UObject::PostEditChangeChainProperty(FPropertyChangedChainEvent &) Obj.cpp:575
UActorComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) ActorComponent.cpp:1114
USceneComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) SceneComponent.cpp:659
UPrimitiveComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) PrimitiveComponent.cpp:1359
UMeshComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) MeshComponent.cpp:192
UObject::PropagatePostEditChange(TArray<…> &, FPropertyChangedChainEvent &) Obj.cpp:760
UObject::PostEditChangeChainProperty(FPropertyChangedChainEvent &) Obj.cpp:542
UActorComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) ActorComponent.cpp:1114
USceneComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) SceneComponent.cpp:659
UPrimitiveComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) PrimitiveComponent.cpp:1359
UMeshComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent &) MeshComponent.cpp:192
[Inlined] FPropertyNode::NotifyPostChange::__l14::<lambda_1>::operator()(UObject *) PropertyNode.cpp:3230
FPropertyNode::NotifyPostChange(FPropertyChangedEvent &, FNotifyHook *) PropertyNode.cpp:3234
FPropertyValueImpl::ImportText(const TArray<…> &, const TArray<…> &, FPropertyNode *, unsigned int) PropertyHandleImpl.cpp:564
FPropertyValueImpl::ImportText(const FString &, FPropertyNode *, unsigned int) PropertyHandleImpl.cpp:252
FPropertyValueImpl::SetValueAsString(const FString &, unsigned int) PropertyHandleImpl.cpp:862
[Inlined] FPropertyHandleBase::SetValueFromFormattedString(const FString &, unsigned int) PropertyHandleImpl.cpp:2585
FPropertyHandleObject::SetValueFromFormattedString(const FString &, unsigned int, bool) PropertyHandleImpl.cpp:4433
FPropertyHandleObject::SetValue(const FAssetData &, unsigned int) PropertyHandleImpl.cpp:4177
SPropertyEditorAsset::SetValue(const FAssetData &) SPropertyEditorAsset.cpp:1114
[Inlined] Invoke(void (SPropertyEditorAsset::*)(const FAssetData &), SPropertyEditorAsset *&, const FAssetData &) Invoke.h:66
[Inlined] UE::Core::Private::Tuple::TTupleBase::ApplyAfter(void (SPropertyEditorAsset::*&)(const FAssetData &), SPropertyEditorAsset *&, const FAssetData &) Tuple.h:317
V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(const FAssetData &) DelegateInstancesImpl.h:299
[Inlined] TDelegate::ExecuteIfBound(const FAssetData &) DelegateSignatureImpl.inl:634
[Inlined] SPropertyMenuAssetPicker::SetValue(const FAssetData &) SPropertyMenuAssetPicker.cpp:362
SPropertyMenuAssetPicker::OnAssetSelected(const FAssetData &) SPropertyMenuAssetPicker.cpp:347
[Inlined] Invoke(void (SPropertyMenuAssetPicker::*)(const FAssetData &), SPropertyMenuAssetPicker *&, const FAssetData &) Invoke.h:66
[Inlined] UE::Core::Private::Tuple::TTupleBase::ApplyAfter(void (SPropertyMenuAssetPicker::*&)(const FAssetData &), SPropertyMenuAssetPicker *&, const FAssetData &) Tuple.h:317
V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(const FAssetData &) DelegateInstancesImpl.h:299
[Inlined] TDelegate::ExecuteIfBound(const FAssetData &) DelegateSignatureImpl.inl:634
SAssetPicker::HandleItemSelectionChanged(const FContentBrowserItem &, Type) SAssetPicker.cpp:584
[Inlined] Invoke(void (SAssetPicker::*)(const FContentBrowserItem &, ESelectInfo::Type), SAssetPicker *&, const FContentBrowserItem &, ESelectInfo::Type &&) Invoke.h:66
[Inlined] UE::Core::Private::Tuple::TTupleBase::ApplyAfter(void (SAssetPicker::*&)(const FContentBrowserItem &, ESelectInfo::Type), SAssetPicker *&, const FContentBrowserItem &, ESelectInfo::Type &&) Tuple.h:317
V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(const FContentBrowserItem &, Type) DelegateInstancesImpl.h:299
TDelegate<void __cdecl(FContentBrowserItem const & __ptr64,ESelectInfo::Type),FDefaultDelegateUserPolicy>::ExecuteIfBound<void,0>(const FContentBrowserItem &,Type) DelegateSignatureImpl.inl:634
SAssetView::AssetSelectionChanged(TSharedPtr<…>, Type) SAssetView.cpp:5191
[Inlined] Invoke(void (SAssetView::*)(TSharedPtr<…>, ESelectInfo::Type), SAssetView *&, TSharedPtr<…> &&, ESelectInfo::Type &&) Invoke.h:66
[Inlined] UE::Core::Private::Tuple::TTupleBase::ApplyAfter(void (SAssetView::*&)(TSharedPtr<…>, ESelectInfo::Type), SAssetView *&, TSharedPtr<…> &&, ESelectInfo::Type &&) Tuple.h:317
V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(TSharedPtr<…>, Type) DelegateInstancesImpl.h:299
[Inlined] TDelegate::ExecuteIfBound(TSharedPtr<…>, Type) DelegateSignatureImpl.inl:634
SListView::Private_SignalSelectionChanged(Type) SListView.h:1007
STableRow::OnMouseButtonUp(const FGeometry &, const FPointerEvent &) STableRow.h:594
??R<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AVFReply@@AEBVFWidgetPath@@AEBUFPointerEvent@@@Z@QEBA@AEBVFArrangedWidget@@1@Z(const FArrangedWidget &,const FPointerEvent &) SlateApplication.cpp:5346
??$Route@VFReply@@VFToLeafmostPolicy@FEventRouter@@UFPointerEvent@@V<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@@FEventRouter@@SA?AVFReply@@PEAVFSlateApplication@@VFToLeafmostPolicy@0@UFPointerEvent@@AEBV<lambda_2>@?7??RoutePointerUpEvent@2@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@W4ESlateDebuggingInputEvent@@@Z(FSlateApplication *,FToLeafmostPolicy,FPointerEvent,const <lambda_2> &,ESlateDebuggingInputEvent) SlateApplication.cpp:456
FSlateApplication::RoutePointerUpEvent(const FWidgetPath &, const FPointerEvent &) SlateApplication.cpp:5332
FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent &) SlateApplication.cpp:5917
FSlateApplication::OnMouseUp(Type, TVector2<…>) SlateApplication.cpp:5873
FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage &) WindowsApplication.cpp:2271
FWindowsApplication::DeferMessage(TSharedPtr<…> &, HWND__ *, unsigned int, unsigned long long, long long, int, int, unsigned int) WindowsApplication.cpp:2783
FWindowsApplication::ProcessMessage(HWND__ *, unsigned int, unsigned long long, long long) WindowsApplication.cpp:1944
[Inlined] WindowsApplication_WndProc(HWND__ *, unsigned int, unsigned long long, long long) WindowsApplication.cpp:939
FWindowsApplication::AppWndProc(HWND__ *, unsigned int, unsigned long long, long long) WindowsApplication.cpp:944
[Inlined] WinPumpMessages() WindowsPlatformApplicationMisc.cpp:116
FWindowsPlatformApplicationMisc::PumpMessages(bool) WindowsPlatformApplicationMisc.cpp:145
FEngineLoop::Tick() LaunchEngineLoop.cpp:5800
[Inlined] EngineTick() Launch.cpp:69
GuardedMain(const wchar_t *) Launch.cpp:190
LaunchWindowsStartup(HINSTANCE__ *, HINSTANCE__ *, char *, int, const wchar_t *) LaunchWindows.cpp:266
WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) LaunchWindows.cpp:317

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-243412 in the post.

0
Login to Vote

Unresolved
ComponentUE - Content - Engine
Affects Versions5.45.5.15.55.5.2
CreatedFeb 5, 2025
UpdatedFeb 7, 2025
View Jira Issue