UE 5.8.4 Mac: Editor crash in DeselectActorElement after moving a Blueprint actor with a Text3D component

Summary

The editor crashes (SIGSEGV, address 0x0) in FActorElementLevelEditorSelectionCustomization::DeselectActorElement when deselecting a moved Blueprint actor that contains a Text3D component. 16 crash reports from Nov 4 to 10, 2026 across two projects; 11 share this exact top frame. Crashes began before any third-party plugins were installed, and happen with both StaticMeshesRenderer and Text3DDynamicMeshRenderer.

Engine: UE 5.8.4-58902052, Launcher (binary) build
Platform: macOS 27.2, Apple M6 Mac mini, 32GB
Crash GUID: UECC-Mac-12903F4E8D45FF0B92F8809EDDF691D4

Likely cause: the component loop in ActorElementLevelEditorSelectionCustomization.cpp calls ComponentSelectionHandle.DeselectElement(…) without checking the handle is valid. UEngineElementsLibrary::CreateComponentElement returns an empty handle for a destroyed component, so the actor’s component list contains a dead component. Moving a Blueprint actor calls AActor::PostEditMove → RerunConstructionScripts(), which recreates Blueprint-added components, and Text3D appears to leave a dead renderer component behind. Older sessions logged thousands of lines like: “StaticMeshesRenderer.TRASH_StaticMeshComponent_42) Trying to register component with IsValid() == false”. Related: 3 other reports crash in AActor::RemoveOwnedComponent / UActorComponent::BeginDestroy during GC or editor exit, one inside UDynamicMeshComponent::BeginDestroy.

What Type of Bug are you experiencing?

Editor

Steps to Reproduce

  1. Create a new blank project
  2. Create an Actor Blueprint and add a Text3DComponent in the Components panel
  3. Place the Blueprint in the level
  4. Compile the Blueprint (not always required, but makes it more frequent)
  5. Move the placed actor with the transform gizmo and release
  6. Click empty space to deselect the actor

Expected Result

The actor deselects normally and the editor keeps running.

Observed Result

The editor crashes on deselect with SIGSEGV at address 0x0 in FActorElementLevelEditorSelectionCustomization::DeselectActorElement. Restarting the editor clears it until the actor is rebuilt again (by moving it or compiling).

Affects Versions

5.8

Platform(s)

Mac

For crash reports, include your callstack

SIGSEGV: invalid attempt to access memory at address 0x0

libUnrealEditor-LevelEditor.dylib!FActorElementLevelEditorSelectionCustomization::DeselectActorElement(TTypedElement const&, TSharedRef<TTypedElementList, (ESPMode)1>, FTypedElementSelectionOptions const&)
libUnrealEditor-LevelEditor.dylib!FActorElementLevelEditorSelectionCustomization::DeselectElement(TTypedElement const&, TSharedRef<TTypedElementList, (ESPMode)1>, FTypedElementSelectionOptions const&)
libUnrealEditor-TypedElementRuntime.dylib!FTypedElementSelectionSetElement::DeselectElement(FTypedElementSelectionOptions const&) const
libUnrealEditor-TypedElementRuntime.dylib!UTypedElementSelectionSet::DeselectElement(FTypedElementHandle const&, FTypedElementSelectionOptions)
libUnrealEditor-TypedElementRuntime.dylib!UTypedElementSelectionSet::ClearSelection(FTypedElementSelectionOptions)
libUnrealEditor-UnrealEd.dylib!UE::Editor::ViewportSelectionUtilities::ClickElement(FEditorViewportClient*, FTypedElementHandle const&, FViewportClick const&)
libUnrealEditor-LevelEditor.dylib!UE::Editor::LevelViewportInteractions::ProcessClick(FEditorViewportClient*, FViewportClick const&, HHitProxy*)
libUnrealEditor-EditorInteractiveToolsFramework.dylib!UViewportClickInteraction::OnClickUp(FInputDeviceRay const&)
libUnrealEditor-EditorInteractiveToolsFramework.dylib!UViewportClickBehavior::UpdateCapture(FInputDeviceState const&, FInputCaptureData const&)
libUnrealEditor-InteractiveToolsFramework.dylib!UInputRouter::HandleCapturedMouseInput(FInputDeviceState const&)
libUnrealEditor-InteractiveToolsFramework.dylib!UInputRouter::PostInputEvent_Mouse(FInputDeviceState const&)
libUnrealEditor-InteractiveToolsFr

Additional Notes

i need this to work. its critical to my game please. thanks.

Good news! kind of…

Update: found a reliable trigger. Switching a placed Blueprint’s Text3D component from StaticMeshesRenderer to Text3DDynamicMeshRenderer in the same editor session leaves the old renderer’s mesh component on the actor as an invalid object. Moving that actor and then deselecting it crashes in DeselectActorElement.

From the crashed session (the actor I had just converted), logged about one minute before the crash:
[2026.11.10-21.58.10:990][743]LogActorComponent: RegisterComponentWithWorld: (/Game/blueprints_new/kc_LEVEL_one_main_v9_MULTIPLAYER_AI_controller_neostack.kc_LEVEL_one_main_v9_MULTIPLAYER_AI_controller_neostack:PersistentLevel.BP_change_text_nexus_test_C_1.Text3D_kanji.StaticMeshesRenderer.TRASH_StaticMeshComponent_1) Trying to register component with IsValid() == false. Aborting.

Crash at [2026.11.10-21.59.09:130]: SIGSEGV at address 0x0 in FActorElementLevelEditorSelectionCustomization::DeselectActorElement (same stack as my original post).

Steps:

  1. Place an Actor Blueprint with a Text3DComponent using StaticMeshesRenderer
  2. In the Blueprint, switch the renderer to Text3DDynamicMeshRenderer, compile, save
  3. Move the placed actor in the level
  4. Click empty space to deselect: crash

Workaround: after switching renderers, save and restart the editor before moving the actor. After a restart no TRASH component is present and the crash does not occur.