Uses a PostFixedUpdate solution with Coroutine. (generates garbage)
Which solves the problem of physics events executing before FixedUpdate,
which would result in a 1-frame delay of detection,
as well as a 1-frame lingering when the target has gone out of range.
The coroutine is probably best replaced by injecting the method into the Player loop. (not provided)
The events are mostly there as an example. They probably need to be redesigned or replaced.