Description

Note: This issue was reproduced in UE 5.7, and it works correctly in UE 4.27.

Prior to CL 24938100 (between UE 5.1 and 5.2), all existing factories were discovered and registered during engine initialization inside UEditorEngine::InitEditor(). Afterwards, they were also sorted by their property "MenuPriority", so that factories with higher priority ended up before those with lower priority in the list. Later, when an asset was dragged to the Level Editor Viewport, function FActorFactoryAssetProxy::AddActorForAsset() was called to decide what factory to use for that asset. To do that, it iterated over all registered factories and selected the first one to return true on CanCreateActorFrom(AssetData). This mechanism allowed engine users to create custom factories with high priority for existing built-in asset types (e.g. StaticMeshes), so that they had a chance to override the behavior of the corresponding built-in factory (e.g. ActorFactoryStaticMeshActor) under specific conditions. The base UActorFactory had a priority of 10 by default, and UActorFactoryStaticMesh had 30 (as configured in file <ENGINE_PATH>\Engine\Config\BaseEditor.ini).

After the mentioned CL (probably released with UE 5.2 or 5.3), the logic above still exists in the code, but it has been superceded by the new UPlacementSubsystem, which has its own list of "AssetFactories" (the old logic is only used if UPlacementSubsystem does not return a valid factory). However, UPlacementSubsystem ignores the MenuPriority property and does not sort its AssetFactories list at all. This means that it does not offer any way to add factories with higher priority than all the built-in ones. As a result, dragging a StaticMesh to the Level Editor Viewport will always create a standard StaticMeshActor, and there is no longer any way for the user to affect that. This broke existing licensee workflows (see related EPS case).

Steps to Reproduce

1. Download the attached repro projects (for UE 4.27 and UE 5.7)

1.1. These projects include a "DragDropFactories" plugin with code and content

1.2. The code has a factory of type "MyFactory" that creates an actor of type "MyStaticMeshActor", but only under certain conditions (in this test project, only when the Static Mesh used as origin is from the specific asset "SM_Test", but the logic could be anything)

1.3. The custom factory has a MenuPriority of 100, so that it overrides the built-in "ActorFactoryStaticMeshActor" when possible

2. Open each project and follow these same steps:

3. From the "DragDropFactories Content" folder:

3.1. Drag the Static Mesh "SM_Test" to the Level Editor Viewport

3.2. Drag the Static Mesh "SM_Test_NoMatch" to the Level Editor Viewport

4. Note that, in UE 4.27:

4.1. "SM_Test" creates a red cube of type "MyStaticMeshActor" (this is the intended behavior)

4.2. "SM_Test_NoMatch" creates a default-texture cube of type "StaticMeshActor"

5. Note that, in UE 5.7:

5.1. Both assets create a default-texture cube of type "StaticMeshActor" (incorrect for "SM_Test")

--> This is because UE 5.7 asks UPlacementSubsystem for the correct factory to use for the dragged asset, and it returns only the first factory that accepts it. Its factories are queried in the order they were registered, without regard for their property "MenuPriority" which in UE 4.27 is used to sort the list.

Have Comments or More Details?

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

0
Login to Vote

Duplicate
CreatedMar 30, 2026
ResolvedApr 9, 2026
UpdatedMay 5, 2026
View Jira Issue