I am working on a game where players will be walking around inside of a large battleship. For the most part this works fine, however sometimes something glitches causing the client and server physics to seemingly desync. This recording is taken from the SERVER perspective. The part has ownership on the client (red), after 6 seconds I set the part’s ownership to the server. You can see that when I do that, the part stops gliding. The battleship is not moving, yet the part is gliding as if it is.
It’s as if the client’s floor is holding some kind of invisible velocity property causing this to occur. The velocities of the ship on the client are all 0 and the ship isn’t moving on the server. The only form of replication step I have managed is if the battleship gets created in a location on top of the client’s local parts (bullet shells, etc). That seems to kick off the physics desync for some reason.
This next clip (taken from the CLIENT perspective) is the result of when the battleship spawns on top of bullet casings (local parts) from the previous round. You can see when I anchor the battleship on the client, the jittering stops, and resumes when I unanchor it. Again, 0 linear and angular velocity for all parts of the battleship both client and server.
So what can be done to fix this? Why do the collisions act as if the battleship floor is moving/shaking when according to both the client and server it isn’t? Is this something I can even fix or is this a roblox bug?
Some more notes:
Printing out the AssemblyLinearVelocity and AssemblyAngularVelocity for all parts on both the client and server is 0,0,0. The battleship is definitely not moving.
The game does NOT use StreamingEnabled
The ship is controlled with BodyVelocity, BodyGyro, and BodyAngularVelocity on the SERVER
Anchoring the battleship on the client stops the jitter. Unanchoring it resumes it
Moving the battleship on the server does no ‘resync’ the physics. Parts still drift and jitter around.
With interpolation throttling enabled, the issue persists. The issue also persists throughout the entire assembly. Here is another clip (client perspective) of it occurring one the deck of the ship, which is an entirely different mesh but still part of the same model/assembly.
The ship is not moving on either the client or the server, but the local part continues to drift like it’s on a conveyor belt.
Here is another clip of the same location on the same ship with a server-owned part. The part doesn’t jitter and remains still like expected.
I was thinking that disabling interpolation throttling might help if it was already enabled (I’ve observed some surprising lack of client->server replication with it enabled, even when the network traffic wasn’t high enough for anything to be throttled). Sounds like it was disabled already though.
The only other thing I could come up with is rounding error. I assume the deck is perfectly horizontal, but maybe if the mesh is large enough the physics sim isn’t accurate enough to see it that way? It’s a long shot, but maybe try temporarily reducing everything to 10% of the current size.
Also, I’m assuming you have CollisionFidelity on the mesh part set to PreciseConvexDecomposition, but if not that’s something else you could try.
Very weird. I’ve seen this happen before, but I’ve never found a solution. One thing you can try is increasing the Density of the parts which seems to do something.
I am getting this issue again, it is very strange. Cycling the maps and loading in the battleships has a chance for their physics to completely desync locally, causing players who interact with them to be teleported into nan space. Just touching one of the ships will fling you into nan space unless I anchor them on the server. I have zero idea what causes this. Here is a clip of it happening to one of our players. Changing height/jumping just instantly breaks the sync of the physics and shoots the camera off into space.
Has anyone else experienced this physics issues at all? I wish I had easy to reproduce steps but it seems incredibly random.