In fairness, I didn’t say they were bad. I just don’t like them for the use case asked due to the drawbacks. The delay from being deferred being a big issue for me, but I also just don’t like managing a connection to an event just for melee combat.
If I trigger an event via input like a mouse click, I expect to run the check in that thread and return a result, at most keeping that thread alive for a few frames to run a sweep check with the animation, but at the end I would expect a result.
I don’t really get that with a .Touched event, as I either need to set it up inside the input event to then keep alive for X time and disconnect (unnecessary overhead in memory and set up cost) or I set up once and keep a constant track of the connection (this forces unnecessary state management) and flag when the .Touched event should react to hits with a boolean lock, which would also require state management.
Unless you really need it, it’s just a less ideal solution, but that doesn’t mean it’s bad.