This issue occurs because post-BP compile reinstancing does not clear delegate bindings to other referenced Actor instances in the scene. Thus, the old BP actor instance remains in the referenced Actor delegate's InvocationList mapping as 'REINST_...' at the point where AActor::ExecuteConstruction() is called from within FActorReplacementHelper::Finalize(). The new instance is then mapped into the other Actor delegate's InvocationList by UBlueprintGeneratedClass::BindDynamicDelegates(), and then the old 'REINST' instance is later replaced within the InvocationList with the new instance, for which the end result is a duplicate binding. Each compile that follows repeats these steps, which results in a new duplicate binding for each occurrence.
Also to note, the duplicate bindings are serialized into the instance in the scene, so this behavior will propagate into a cooked build as well.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-64922 in the post.
1 |
Component | UE - Gameplay - Blueprint Compiler |
---|---|
Target Fix | 4.24 |
Created | Oct 8, 2018 |
---|---|
Resolved | Sep 23, 2019 |
Updated | Oct 2, 2019 |