Character mesh position desync in online sessions

Just discovered that players joining late in an online session experience character mesh position desyncs, the mesh of the other players are offset and are not centered at the player location if the other players are not standing still while/when the new player connects. I’ll be investigating this further. This happens in 4.16.1

Any advice is appreciated. /Best Regards

I have confirmed that this bug is easily reproduced in a fresh project.

Create BP FPS Template (no starter content)

Select any sk mesh for the default inherit character sk mesh.

Set up 2 keyboard keys, one to host session and one (5s delay) to join session

Simulate with 2 players, host with one, and join with the other.

Observe as the mesh location only remains correct if the host was stationary when the new player joined. If the host (or anyone else for that matter) is moving around when a player join, the mesh location is desynced and offset.

Here is a simple test project to demonstrate the issue
Download

Sample project instructions:

Simulate 2 players (PIE) in editor

Press “G” on one player to host a session

Press “H” on the other player, in 5-10s the other player will connect to the session. Meanwhile, run and jump around with the host player and observe.

Hey MADHOUSE,

I tested this on my end but I’m not seeing any unusual behavior.

Would you mind providing a video of what you’re seeing so I can compare it to what I see on my end?

Thanks

I can confirm this bug as well. For people who later joined the game, it happens often that the character mesh is being desync. We have a widget showing the name of the player above the players, which is on the correct position, but the mesh is somewhere far away from the right position.

This was working in version 4.15, so it must be something new bug introduced to 4.16 or 4.16.1. Other than that, it seems to happen more often when the players are interacting with “desync” physical objects.

I agree. I’m having similar problems. The Character parent class inherited mesh does not seem to be matching the server’s location. I’ve tried for a few hours to fix the problem. It only seems to affect the inherited mesh.http://imgur.com/jhDEec9 (Compare the client on the top to the server on the bottom)

Is this what you all are experiencing? Maybe I’m just making a silly 4am mistake.

Yeah this is a critical bug in 4.16
Same as can be seen on this video: UE4 desync/offset bug - YouTube

There also is no way of resetting the position of the mesh, it will only snap back as soon as the server replicates position data to the client, regardless if the server AND client resets the relative location and rotation of the mesh to 0.

This issue is causing a lot of trouble, the inherit character mesh can’t be reset manually either. If attempting to reset the relative location and rotation of the mesh to 0 it only causes it to snap back as soon as it is moved again, regardless if it is reset on both client and server.

Hey everyone,

I’ve reproduced this issue and have entered a bug report which you can track using the link below:

Thanks for your report.

Have a great day

I would like to add that this is a pretty critical bug. I’m surprised it hasn’t been fixed yet. It happens in packaged versions too, not just PIE.

Why did this get backlogged? It’s proven very intrusive to our project and I can imagine many others! I fear putting this on the backlog means it will stay around several more releases…

This issue seems to be caused by the call to CacheInitialMeshOffset in ACharacter::BeginPlay (line 148 in Character.cpp). The call itself seems to be countering issues caused by changing Mesh’s relative location in a custom BeginPlay, so if you are not doing that (which seems like a bad idea anyway), you should be safe to comment out this line.

This is a fix that we are going with, so I’m posting it here, in case it might prove useful to someone. It doesn’t explain why the bogus values exist in BeginPlay, but essentially should render them harmless.

Greetings!
This is a short video demonstrating the issue. The sample project was used in the video, but this happens in any project built with 4.16.1 and is currently shipping breaking.
The problem is reported by every tester and is consistently reproduced.

This is a simulated PIE enviroment but the same problem happens on our online steam servers.

edit: the actual mesh that is desyncing/offsetting is the inherit character mesh and meshes attached/parrented to it, any other meshes attached / added to the actual actor is unaffected.

Possible emergency workaround:

Make a duplicate of the inherit mesh, setup as necessary, replace ALL usage of the inherit mesh with the new mesh.

Set the inherit mesh to “none”, visibility off, and concider it dead floating data.

This may or may not work for some projects, in my case it might be serviceable untill this is fixed.

I agree. That worked for me. You would think more people would be reporting this bug?

I am experiencing this issue as well in 4.16.2 with the inherited character mesh.

I am experiencing this issue as well in 4.16.2 with the inherited character mesh. When other players join there is almost always an offset between the actor location and the inherited mesh that is visible on clients.

Yeah. If you check the issue tracker, this bug is listed as “Backlogged”, so they don’t really consider it a priority at this point. The workaround is “acceptable” but its not optimal, and I wouldn’t call it shippable.

I haven’t tested this in 4.17 preview 3 yet, but that build is having a ton of other even more critical issues atm…

Try the workaround i posted bellow if possible, its not very clear when this issue will be addressed. If its not already fixed in 4.17 preview then it probably won’t get fixed before 4.18 or later.

Hey i made a post about this earlier… shame no one saw it. I’m assuming this is the bug that I am having?

-Samuelb

Thanks, I have tested the workaround with server travels and disconnect/connects and it seems to work.