We have a few ways of dealing with this on Fortnite. Mainly master shaders and customdepth post processing.
I would personally recommend the master shader approach over the custom depth one.
A master shader is a material that is set up to be flexible with lots of parameters in order to handle a large number of assets. On Fortnite, all of the environment props are instances of a single master material. That material utilizes staticswitchparamters to give flexibility without bloating up rendering cost.
The really nice thing about that, is that you can put things in the master shader that are basically defaulted to “off” that you selectively enable either through switches for hand created variation, or by creating MIDs and modifying the parameters.
As an example, you could create a material function called “Flash Damage” and add a few input scalar parameters. I suggest you add one input parameter called “Time of Hit” to start. Inside the function itself, you take Time - ‘time of hit’. What that does is give you a new time counter starting at 0 but without having to pay to tick the MID via blueprint or timeline. Then inside the material function you can use sine or whatever to make a nice pulsing animation and simply add an emissive output component that is multiplied by that sine of time-‘timeofhit’ part. You could of course mix in any artistic effects you want such as fresnel.
That is actually how we cheaply animated many of the interactive bits to react to user touch for the Zen demo. You only pay the cost of setting a parameter once( the “time of hit” one I mentioned) via Blueprint once instead of ticking the MID every frame.
The other approach is to use the custom depth option to set which meshes are hit and make them emissive using the post process system. It would be a bit more complicated to individually animate the damage although should be doable.