Rubberbanding in 2D Multiplayer Game (Not in Editor)

Hello All,

I have been working on a Multiplayer 2D game using unreals 2DPaperCharacter with replication. Right now testing the project in PIE on Listen Server mode (with simulated network latency) it has little to no rubberbanding – however when deploying the project in my Google Cloud VM it seems so bad that its almost unplayable. I used Stat Net and found that ping is coming across at roughly 60 ms.

I setup the replication using tactics I had read from other peoples forums questions. My general understanding is that whatever action is happening (in my case LaunchCharacter) needs to happen on the client and then also be called on the server to be replicated to all other clients.

So, for this I have a RequestLaunch event set to Run on Server and a Response Launch event set to Multicast. Once the client does the LaunchCharacter locally, they use the request launch event to tell the server that they are launching which calls the LaunchCharacter node on the server as well, and then this is replicated to all other clients in order to keep each players client up to date. Based on what I read this is the most elementary way to try and keep client and server sync using blueprints.

With the above events in place i’m still seeing the rubberbbanding. I want to clarify that this is the best way to approach this problem with blueprints (without modifying CharacterMovement using C++)

Another method I have read about, is keeping the flags on the server and then having the client respond to the flag being set. I haven’t tried this yet, but to me this entitles a certain amount of trust to the client which seems wrong. If anyone has heard this is a better method please give me your suggestion.

What im working on is Wall Climbing, so I have a Wall Climbing flag on the character. The checks for wall climbing happen in the client and then the client tells the server to launch the player.

Would it be better to have the checks happen on the server? So to say – the server sets Wall Climbing = true, the client can than interpret this and respond by launching the character? I haven’t tested this method but it seems so similar to what I have currently that I’m not sure it would improve performance in any way.

Any suggestions from anyone who’s worked this issue themselves would be amazing. I’m reading a lot of different things online as I’m sure it changes from game to game but wanted to check if there is some standard blueprint method for getting sync’d launch on client and server.

It’s very difficult to test since the game has to be packaged and deployed each time I want to test changes as this is only really noticeable on the remote server.

Again, any suggestions would be great and I’d be happy to provide additional info.