It has a C++ class called ABPEvent with a BlueprintImplementableEvent called TestEvent.
TestEvent is called both from BeginPlay and from PostEditMove.
There’s also a BP class that inherits from ABPEvent called BPEvent_BP that prints “Test Event” inside the TestEvent.
If you press Play, BeginPlay gets called and then TestEvent. However if you move the actor inside the editor, PostEditMove gets called, but TestEvent doesn’t.
This is actually expected behavior, blueprint events only trigger while the game is running. Blueprint custom events and code-based BlueprintImplementableEvent will fire when they are triggered during gameplay, but the events don’t know to listen for a call in the editor.
The construction script in the blueprint equates to the class constructor in code. Anything set in here will be updated when the blueprint is updated. If you want to print information in the editor then using UE_LOG as in your example is the best method.
Ok, after some debugging I found a solution.
If you want to call BP events while int the editor you can specify the metadata CallInEditor in your UFUNCTION declaration.
Like this :
UFUNCTION(BlueprintImplementableEvent, meta = (CallInEditor = "true"))
void TestEvent();