The Add Content menu in the engine (on the menu bar just above the viewport) maintains a category of Recently Placed actors. In order to remember items between runs of the editor, the Recently Placed actors are serialized out to config (as a combination of the ObjectPath and Factory) in FPlacementModeModule::AddToRecentlyPlaced(), and are loaded on startup in FPlacementModeModule::StartupModule().
Upon load, it is assumed that the ObjectPath and Factory both refer to the same objects that existed in the previous run of the engine. Unfortunately this is not necessarily the case for the Factory.
Factories are created via calls to NewObject(), with no name specified. This means that if there are multiple factories of the same class (e.g. ActorFactoryBoxVolume), they will all have the same name (with a numeric suffix). If the order in which the factories are created changes between runs of the engine, or if a new type is added or removed, then a Factory may end up having a different name when the RecentlyPlaced items are saved and when they are loaded. For example, the Factory for PostProcessVolume may be saved out as ActorFactoryBoxVolume_31, but on a later run of the editor, it may become ActorFactoryBoxVolume_32 (or any other number).
This makes it possible for the engine to try to spawn a Recently Placed actor using the wrong type of factory. For Volumes specifically, this can cause the volume to not end up having a Brush created for it, meaning it will have no collision.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-184111 in the post.
2 |
Component | UE - Editor - Workflow Systems |
---|---|
Affects Versions | 5.1 |
Created | Apr 24, 2023 |
---|---|
Updated | Jan 20, 2024 |