So context is that I am making a teleporting tomahawk, if you throw the tomahawk, which is moved using a body mover, it will teleport you to the location where it first hit. The issue here is that for some reason, it tells me it hit at a location where it touches nothing, such as in the middle of the air, so it appears that it gives the touched event location prematurely. The model of the tomahawk itself isn’t a mesh, it’s a model with every part welded to the handle, so I wonder if this is affecting the physics of the tomahawk.
Video below shows the issue, as you can see, here I made it so the script instantiates a part where the script seemingly tells me where the part was hit. However, this is not possible as I aimed the tomahawk at a wall, and it seems to teleport me to in the middle of the air when it should have teleported me somewhere on the surface of the wall. robloxapp-20200621-0538176.wmv (3.8 MB)
I’m not sure if this is possible, but is the .Touched event firing for the parts of the tomahawk? e.g. the parts of the tomahawk are touching each other and firing the event.
Maybe create a check to ensure that the .Touched event is ignored if both hitparts are inside the tomahawk model. Again, I may be wrong though.
Make sure parts inside the model ignore each other, you can use the Collission group service to make parts ignore each other or use a NoCollission constraint.
Doing raycasts into the direction it’s moving/being thrown at is also useful practice, raycasts have a ignore list.
It could possibly be a network owner/lag issue, object reaching/touching a part on the server/client before replicating to others or a rare case of client/server not agreeing, not sure where you run the script on but it could be very possible.
Though, personally, to fix this issue, I’d write a raycast-based projectile instead of physics based.
I only use physics for things that need to bounce for example, if it’s a single projectile/throw that stops on hit, raycasts with tweens will be your friend.