When a LinearVelocity is created on the server, it will appear to have a noticeable “delay” before it acts when viewed as a player. This causes a sort of “teleportation” or “lag” effect to the part of which LinearVelocity is a descendant. A reproduction file listed below uses LinearVelocity & BodyVelocity as a comparison. BodyVelocity does not have this issue (or at least, a noticeable issue). This makes using LinearVelocity at high velocities almost unusable on the server as the first few moments cause the instance to teleport:
All constraints always had a delay before they started simulating (as expected when created on the server due to ping), but LinearVelocity, in particular, suffers from this issue the most as it can create unpredictable movement when used in high-velocity scenarios.
Comparison: LinearVelocity used in a production game
This is an enemy AI using LinearVelocity to displace its position. As you can see, it is choppy on the initial jump, making it seem like he teleports.
Comparison: Same thing as above, but instead using BodyVelocity
Still has a delay, but mostly unnoticeable.
System Information
- AMD Ryzen 3700x
- GTX 1070 Ti
- 32GB 3200mhz Ram
- Wins 10 Pro
Reproduction Steps
File: VelocityConstraintBugs.rbxl (47.0 KB)
- Open the file above
- Press Play Solo or F5
- You will be able to see that LinearVelocity acts a lot later than BodyVelocity
- Optionally, you can view it on the server (or run with F8 instead of F5), and you can see how both constraints should be working
Expected behavior
I expect LinearVelocity, when created on the server, to have a minimal lag effect after a force is acted on the part when viewed from a client, similar to the deprecated BodyVelocity.