Here's how it goes: https://streamable.com/8xl8ty
local speed = script.Parent.Main.Speed.Value function fire() local NewShell = Instance.new("Part", game.workspace) NewShell.Transparency = 0 NewShell.Position = script.Parent.Barrel.Position NewShell.Velocity = script.Parent.Barrel.CFrame.RightVector * speed wait(0.1) NewShell.Touched:Connect(function(TouchedPart) print(TouchedPart.Name) NewShell.Anchored = true end) print("works") end script.Parent.Button.ClickDetector.MouseClick:Connect(fire)
I had similar problem in the past when anchoring a projectile, chances are the part does hit the baseplate on the server, but on the client visual it anchored before it hits the baseplate,
try changing the network ownership of the projectile with
NewShell:SetNetworkOwner(nil)
That will make the physic calculation purely on the server
Edit :
This bug is caused because the physic calculation is on the client side but the hit detection is on the server side, so when the part is hit on the server, it anchors the part too soon for the player.
It seems I had to wait around 15 seconds for the studio to load up after I press Play. Then it starts to work properly, without touching stuff while in the air.