possible bug with dynamic multicast delegates

In the future I will most likely leave the bindings in BeginPlay() instead of moving them to PostInitProperties().

The problem with my current project is that even after I move the bindings back to BeginPlay() in C++ and recompile, I still get the error for these Actors. It now shows the error originating from BeginPlay() meaning it is already bound when BeginPlay() is reached. I know about options such as calling RemoveDynamic() before calling AddDynamic() or AddUnique() but I am more curious about the behavior here.

I could be wrong, but I think it’s possible that once the the bindings were moved to PostInitProperties() they somehow got saved/serialized into the Blueprint. So the Blueprint is still somehow trying to bind in PostInitProperties() even though the C++ code shows that nothing is there anymore. Maybe someone with more engine experience could comment on whether or not this is something that could be happening.

It doesn’t help to recompile and save the Blueprints – the error still shows. However, creating fresh Blueprints for these Actor types does seem to solve the problem. At least, that’s what I was seeing in my testing just now.

So, I guess the only way to “recover” is to create fresh Blueprints and avoid moving the C++ bindings to PostInitProperties() in the future (or use logic to check if not in editor).

I would be curious to know if my theory is correct because I have read that these dynamic delegates can be saved/serialized and that sometimes Blueprint doesn’t respect changes made in C++.