i had a different approach for mele hits in my prototype, what helped is @EgoMoose 's Rotated Region3 Module
for each attack type (combos or weapons) i had a table with information about the hitbox, something like:
local hitbox = {CFrame, Size}
which gave you a cframe offset from a players humanoidrootpart and the size of the hitbox, creating a part (to visualize the hitbox), i’d construct a rotated region3 with the module given the parts cframe (in front of the player, positioned however i want) and the vector3 size of the region, dettect all parts inside the region and filter them out (npc, player, duplicate part of player already hit ect.)
this would happen in one frame, preferably with a custom animation event of the impact.
i’ve tried all 3 methods plus raycasting and found that this was the absolute best option for both performance and accuracy
but (if for some reason you cant make this happen) out of your 3 methods listed i’d probably go for the first one for accuracy as touched events are unreliable. and probably just loop through the players instead of all parts of workspace