Description

Editing the Child Actor Class of a Child Actor Component owned by a Parent BP can corrupt the Child BP's state.

This seems related to known serialization issues, where changing a Parent's Property value (or a Property value within a Component owned by the Parent) to the same as that of the Child BP will cause odd behavior.

Steps to Reproduce
  1. Create a new BP Only project.
  2. Create 3 new AActor classes: ParentActor, ChildActor, ChildActorAlt.
  3. Create a Subclass from ParentActor called ParentActorSub.
  4. Open editor windows for all classes.
  5. Add a ChildActorComponent to ParentActor.
  6. Set the ChildActorClass for the CAC to ChildActor, compile, and save.
  7. Open ParentActorSub.

EXPECTED:
The Child Actor Class is set and Child Actor Template is available for customization.

ACTUAL:
Thie Child Actor Class is set but the Child Actor Template is not available for customization.

  1. Change the Child Actor class (of ParentActorSub's CAC) to ChildActorAlt, compile, and save.
  2. Open ParentActor.
  3. Change the Child Actor Class to ChildActorAlt, compile, and save.
  4. Clear the Child Actor Class

EXPECTED:
When clearing the Child Actor Class, the editor never crashes.

ACTUAL:
When clearing the Child Actor Class, the editor crashes (hits an ensure).

Callstack
UE4Editor-Engine.dll!UChildActorComponent::Serialize(FArchive & Ar) Line 95	C++
UE4Editor-CoreUObject.dll!StaticDuplicateObjectEx(FObjectDuplicationParameters & Parameters) Line 2022	C++
UE4Editor-CoreUObject.dll!StaticDuplicateObject(const UObject * SourceObject, UObject * DestOuter, const FName DestName, EObjectFlags FlagMask, UClass * DestClass, EDuplicateMode::Type DuplicateMode, EInternalObjectFlags InternalFlagsMask) Line 1928	C++
UE4Editor-Engine.dll!AActor::CreateComponentFromTemplate(UActorComponent * Template, const FName InName) Line 903	C++
UE4Editor-Engine.dll!USCS_Node::ExecuteNodeOnActor(AActor * Actor, USceneComponent * ParentComponent, const FTransform * RootTransform, bool bIsDefaultTransform) Line 97	C++
UE4Editor-Engine.dll!USCS_Node::ExecuteNodeOnActor(AActor * Actor, USceneComponent * ParentComponent, const FTransform * RootTransform, bool bIsDefaultTransform) Line 181	C++
UE4Editor-Engine.dll!USimpleConstructionScript::ExecuteScriptOnActor(AActor * Actor, const TInlineComponentArray<USceneComponent *,24> & NativeSceneComponents, const FTransform & RootTransform, bool bIsDefaultTransform) Line 650	C++
UE4Editor-Engine.dll!AActor::ExecuteConstruction(const FTransform & Transform, const FComponentInstanceDataCache * InstanceDataCache, bool bIsDefaultTransform) Line 718	C++
UE4Editor-Engine.dll!AActor::RerunConstructionScripts() Line 491	C++
UE4Editor-Engine.dll!UActorComponent::ConsolidatedPostEditChange(const FPropertyChangedEvent & PropertyChangedEvent) Line 655	C++
UE4Editor-Engine.dll!USceneComponent::PostEditChangeProperty(FPropertyChangedEvent & PropertyChangedEvent) Line 439	C++
UE4Editor-CoreUObject.dll!UObject::PropagatePostEditChange(TArray<UObject *,FDefaultAllocator> & AffectedObjects, FPropertyChangedChainEvent & PropertyChangedEvent) Line 514	C++
UE4Editor-CoreUObject.dll!UObject::PropagatePostEditChange(TArray<UObject *,FDefaultAllocator> & AffectedObjects, FPropertyChangedChainEvent & PropertyChangedEvent) Line 499	C++
UE4Editor-CoreUObject.dll!UObject::PostEditChangeChainProperty(FPropertyChangedChainEvent & PropertyChangedEvent) Line 402	C++
UE4Editor-Engine.dll!UActorComponent::PostEditChangeChainProperty(FPropertyChangedChainEvent & PropertyChangedEvent) Line 693	C++
UE4Editor-PropertyEditor.dll!FPropertyNode::NotifyPostChange(FPropertyChangedEvent & InPropertyChangedEvent, FNotifyHook * InNotifyHook) Line 2354	C++
UE4Editor-PropertyEditor.dll!FPropertyValueImpl::ImportText(const TArray<FObjectBaseAddress,FDefaultAllocator> & InObjects, const TArray<FString,FDefaultAllocator> & InValues, FPropertyNode * InPropertyNode, unsigned int Flags) Line 558	C++
UE4Editor-PropertyEditor.dll!FPropertyValueImpl::ImportText(const FString & InValue, FPropertyNode * InPropertyNode, unsigned int Flags) Line 358	C++
UE4Editor-PropertyEditor.dll!FPropertyValueImpl::SetValueAsString(const FString & InValue, unsigned int Flags) Line 829	C++
UE4Editor-PropertyEditor.dll!FPropertyHandleObject::SetValueFromFormattedString(const FString & InValue, unsigned int Flags) Line 3429	C++
UE4Editor-PropertyEditor.dll!TBaseSPMethodDelegateInstance<0,FPropertyEditor,0,TTypeWrapper<void> __cdecl(void)>::Execute() Line 327	C++
UE4Editor-PropertyEditor.dll!TBaseSPMethodDelegateInstance<0,FPropertyEditor,0,void __cdecl(void)>::ExecuteIfSafe() Line 433	C++
UE4Editor-PropertyEditor.dll!PropertyCustomizationHelpers::SPropertyEditorButton::OnClick() Line 80	C++
UE4Editor-PropertyEditor.dll!TMemberFunctionCaller<PropertyCustomizationHelpers::SPropertyEditorButton,FReply (__cdecl PropertyCustomizationHelpers::SPropertyEditorButton::*)(void) __ptr64>::operator()<>() Line 165	C++
UE4Editor-PropertyEditor.dll!UE4Tuple_Private::TTupleImpl<TIntegerSequence<unsigned int> >::ApplyAfter<TMemberFunctionCaller<PropertyCustomizationHelpers::SPropertyEditorButton,FReply (__cdecl PropertyCustomizationHelpers::SPropertyEditorButton::*)(void) __ptr64> >(TMemberFunctionCaller<PropertyCustomizationHelpers::SPropertyEditorButton,FReply (__cdecl PropertyCustomizationHelpers::SPropertyEditorButton::*)(void)> && Func) Line 497	C++
UE4Editor-PropertyEditor.dll!TBaseSPMethodDelegateInstance<0,PropertyCustomizationHelpers::SPropertyEditorButton,0,FReply __cdecl(void)>::Execute() Line 327	C++
UE4Editor-Slate.dll!TBaseDelegate<FReply>::Execute() Line 537	C++
UE4Editor-Slate.dll!SButton::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 278	C++
UE4Editor-Slate.dll!FSlateApplication::RoutePointerUpEvent::__l8::<lambda>(const FArrangedWidget & TargetWidget, const FPointerEvent & Event) Line 5087	C++
UE4Editor-Slate.dll!FEventRouter::Route<FReply,FEventRouter::FToLeafmostPolicy,FPointerEvent,FReply <lambda>(const FArrangedWidget &, const FPointerEvent &) >(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::FReply <lambda>(const FArrangedWidget &, const FPointerEvent &) & Lambda) Line 239	C++
UE4Editor-Slate.dll!FSlateApplication::RoutePointerUpEvent(FWidgetPath & WidgetsUnderPointer, FPointerEvent & PointerEvent) Line 5076	C++
UE4Editor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(FPointerEvent & MouseEvent) Line 5557	C++
UE4Editor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const FVector2D CursorPos) Line 5537	C++
UE4Editor-Core.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 1699	C++
UE4Editor-Core.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,0> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2122	C++
UE4Editor-Core.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 862	C++
UE4Editor-Core.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 709	C++

Have Comments or More Details?

There's no existing public thread on this issue, so head over toAnswerHub just mention UE-45985 in the post.

0
Login to Vote

Fixed
ComponentGameplay - Components
Affects Versions4.154.16
Target Fix4.16.24.17
Fix Commit3487658
Main Commit3510073
CreatedJun 13, 2017
ResolvedJun 13, 2017
UpdatedApr 27, 2018