Apply radial damage node doesn't damage actors

My actors to which I am trying to apply damage have a capsule component (They are inherited from the Character unreal standart class). When capsule radius or height is big and actor’s location vector doesn’t overlap with radial damage, but its capsule does, my actor doesn’t get any damage (Event AnyDamage isn’t called). I have my own collision channel, my own prevention channel. I have tried all 3 ^ 3 settings for those 2 and Visibility channel.

All other actor components have NoCollision preset.

How do you have the apply radial damage setup, can you post a screenshot?

Why are you setting the damage to a negative value? it shouldn’t be a negative value. Disconnect the pins from the breakspell and add manual values for testing, set the radius to something like 500 and the damage to a positive value like 100 or whatever values you are wanting to achieve with the damage and add a print string to you EventAnyDamage to see if it is firing.

I have all damage/heal numbers in datatable, you are going wrong way, because our logic works for other actors. Only actors with capsule radius bigger than radial damage radius don’t fire EventAnyDamage.

1 Like

Apparently, after some experimenting on this, I found the possible source of this issue. ApplyRadialDamage calls ApplyRadialDamageWithFalloff, which traces lines to all overlapping components on Damage Prevention Channel for all dynamic objects. If trace line does not hit, then it uses the origin of the bounding box of the component. Then, I believe, hit location of this trace is passed to function, that calculates falloff. If the distance between hit location and origin bb is higher than the damage radius, function sets the actual damage to 0 and returns as if you passed 0 to base damage.

Solution:
If your actor collision is bigger than the damage range, then you should set your collision channel to block on victim. Also, make sure that your component’s collision is not static, since ApplyRadialDamage ignores it. I also recommend to ensure that collision components inside your actor do not overlap with each other, or at least their origins are outside of other collisions.

I was having similar struggles with inconsistent radial damage (actor clearly in radius, calling ApplyRadialDamage, ApplyRadialDamage returned true, but never actually applied damage). Your response lead me down the trail of trying ApplyRadialDamageWithFalloff instead of ApplyRadialDamage and that solved all of my problems, even if the radius is something ridiculously small like 1.5 cm. Thanks for your answer!

1 Like

Posting in case anyone else comes across this thread:
Be sure to check the Class Defaults for the actor that is being damaged. Under the “Actor” section, there is a tick box for “Can be Damaged”. Also ensure that the collision or mesh components on the actor are blocking the Visibility channel.
image

Came here because in my project 4.26.2, Apply Radial Damage appears to best damaged a target if the radius was very close to the actor’s world location. Using Draw Debug Sphere showed that even though the leg or tail of my meshes were within the radius, they weren’t taking damage.

Changing Apply Radial Damage to “Apply Radial Damage With Falloff” solved my problem. Now any piece of actor within the radius takes damage consistently, regardless if it’s their torso, toe, or tail.

1 Like