This is the example code I used to reproduce this issue/phenomena.
The wait function is just so there is eanough time to witness the issue.
My expectation is that when the part is created, it will be given a velocity by “ApplyImpulse”, and thus will move immediately as it appears in the world.
But instead, there is a ~1/3 of the second delay before the part actually starts moving. So it is just stationary, frozen in air for a period of time. When in reality it should be moving almost immediately.
wait(5)
local part = Instance.new("Part")
part.Name = "test"
part.Position = Vector3.new(0,5,0)
--part.AssemblyLinearVelocity = Vector3.new(0,100,0)
part.Parent = workspace
part:ApplyImpulse(Vector3.new(0,1000,0))
From what I understand, this is a networking issue. Because the above code runs on the server (as I assume happens most of the time). And when you eventually move the part to the workspace, that is when it is replicated to other clients. So when you call “ApplyImpulse”, that information comes later after the part has been created on the client, and thus the delay before the part starts moving.
That’s my guess at least.
Calling “ApplyImpulse” does not work if called before the initial parenting happens.
So I am hoping there is some simple solution to this.
I can provide a gif showing what I am witnessing as well, if none of you see what I am describing after running the above lua code on your computers.