Why is my knockback so... delayed?

--knockback
			if not hit.Parent.Torso:FindFirstChild("spinjitzuVelocity") then
				local velocity = Instance.new("BodyVelocity")
				velocity.Name = "spinjitzuVelocity"
				velocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
				velocity.Velocity = (-hit.Parent.HumanoidRootPart.CFrame.LookVector * 100) + Vector3.new(0, 50, 0)
				velocity.Parent = hit.Parent.HumanoidRootPart
				wait(.1)
				velocity:Destroy()
			end

This is my current knockback script.

It gives the desired effect, but it seems… delayed?
At first I thought it only worked when I moved away from the player (it’s a spinjitzu script, so you’re constantly hitting them in the spinning tornado) but it turns out that it’s just delayed (the same could be said about the knockback on my kick script, with similar scripting to this).
Why does it take so long for the body velocity to take effect?

NOTE: The delay is probably around .75 - 1 second long, which doesn’t seem like a lot, but when you’re getting dealt about 25 damage a second when you’re in the tornado, it’s pretty bad.

Your script seems could it could just be server delay.

Velocity is pretty time consuming for the server. You can try using a bodyForce, or else it may just be roblox’s classic delay that we all have to put up with.

I agree with @SilentSuprion you should consider the server-client timing. If you detect the tornado on the client (localscript looking at own player character) then there won’t be any client-server delay. If you are doing it from the server, then the server will replicate the BodyVelocity to the client and then the client will apply the physics. That’s because the client has network ownership over the character.