Collision Detection for Slow Moving Projectiles?

What would be the best way to check for collisions with a somewhat slow moving projectile? Right now I’m using a 1x1x1 part with BodyVelocity set for a speed of ~200, but this has resulted in a few problems…

  1. Some parts, when the projectile hits it, will result in the projectile being repelled in the opposite direction. But often times, this will result in projectile going a few studs forward before being reversed (which doesn’t look very good).

  2. Occasionally the trail attached to the part will seem to reverse direction randomly for a few studs, then resume again. This is usually only when there is some lag, especially on new servers, so I’m not sure how that’s happening?

  3. Sometimes the projectile will register a collision, but the position of the projectile when the Touched event fires is usually a few studs beyond where it should have been (since the projectile is CanCollide false, it just goes through parts).

  4. Once in a while, the projectile simply won’t register a collision from a far away distance, even against huge parts. This is likely due to lag of some sort?

I’ve considered raycasting, but since the projectile travels somewhat slow, I’d need to use multiple raycasts. And even then, I also would prefer to have a little bit more leeway when it comes to hitboxes (i.e. you can be within a few studs of the target humanoid to register a collision). This could probably be done if I were to compile a list of all possible humanoids, NPC or player controlled, but I feel like that’d be somewhat laggy each time I wanted to cast a projectile out.

Is there any alternative I could do? It’d be great if I could work it out with BodyMovers, but otherwise it’d be nice to know the best method.

1 Like

#1 shouldn’t be a problem if all the hit detection is being done client-side. The issue is from latency between server and client.
#3 is also the same issue.

#4 simply might be how the Roblox render distance system works.