Quick answer: Bind Event Dispatchers in BeginPlay, not Construction Script. Unbind in EndPlay.
Construction Script binds OnDamageDealt to a function. Run game; damage fires; nothing happens. Editor re-running Construct each frame in PIE wipes the binding.
The Fix
BP Event Graph:
BeginPlay:
Get HealthComponent
→ Bind Event to OnDamageDealt(HandleDamage)
EndPlay:
Get HealthComponent
→ Unbind Event from OnDamageDealt(HandleDamage)
BeginPlay runs once per actor lifetime. Construction Script runs many times during edit and instantiation, defeating bindings.
Verifying
Damage handler fires. EndPlay cleans up. Re-bind in Construct: handler doesn’t fire after first PIE compile.
“BeginPlay binds. EndPlay unbinds. Dispatcher fires.”
Related Issues
For replication scope, see replication scope. For Set Timer handle, see timer handle.
BeginPlay for binding. Dispatcher fires.