Unreal Engine Replicated Physics

In my game, I have a boat controlled via mouse input. The boat moves using Add Force and Add Torque, and I apply buoyancy every frame using Add Force at Location. The buoyancy is calculated on every player. My goal is to achieve smooth multiplayer movement with up to 100-150ms latency. I don’t have a cheating concern.

I’ve been struggling with this for weeks and haven’t found a fully stable solution. The best result I got was applying forces on both the client and the server. However, this approach occasionally causes strange issues especially after collisions where the boat suddenly teleports or even crashes the game. All collisions and movement stuff gets disabled on the player when they enter the boat.

I’m using Unreal Engine 5.4 and have tried the new Physics Prediction Modes, but I couldn’t get them to work properly. I’ve experimented with substepping, fixed frame rate settings, and even integrated Smooth Sync. While Smooth Sync provided decent results, it introduced another issue: clients could no longer physically interact with the boat (e.g., pushing it).

I need a reliable way to make the boat feel smooth in multiplayer without these unpredictable issues.

Here is my current bp setup:

Character BP


Boat BP


Boat Replication Settings

Physics Settings

Boat Details

Hey @eymen.t, welcome to the forum.

The problem you are trying to solve is a really hard one. I don’t think I have the expertise to solve it but I can point you to the documentation of the CharcterMovementComponet. There is a detailed explanation of how movement prediction and correction is done and maybe you can adopt some of it.

Hope it helps somehow.

Hello Thank you for your response. I understand that this is a challenging issue. Reviewing the Character Movement Component and its code is a sensible approach, and I will look into it. Actually, adding force on both the client and the server works with the desired smoothness, but it leads to the bug shown in the video. If I can fix that, it should work. Do you have any idea why this might be happening?

i dont think its really a bug, its likely just server correction. i dont think adding force on the client is a viable solution.

try just adding it on server, you will get input lag but the movement should be smoother

Hmm, I need to add forces only on the server and do prediction then

I am speculating here but what I think is happening is that the exact collision point is a bit different on the client and the server, so the normal is now more different and the forces end up way different. The boats end up in different spots and have to be corrected.

You might try to ease up the correction. I’m not sure where it was but there should be a way to configure when the correction is applied and how aggressively.

You might try to make sure initial conditions are exactly the same by taking the player location and the force directly from the server. (Yes. I do support simulating the actual displacement on both on the server and on the client.)

Your boat needs to be derived from the Pawn class, preferably the vehicle class. You can then use the vehicle movement component.

Aren’t the Vehicle Movement Component and Chaos Vehicles designed specifically for wheeled vehicles/cars? Can they be used for a boat like this?

Yes, that makes sense. I couldn’t find anything about the correction settings. They seem to be in the Character Movement Component, but I’ll research it further. I’ll give it a try. But if I can somehow get the Vehicle Movement Component to work, as @Rev0verDrive mentioned, that might be the easier option.

hey dude, please contact me on discord: themax0, because i got the same issue too.

After a more detailed debugging session, I found that the FPS drop also plays a role in triggering this bug. Specifically, when the server experiences an FPS drop, clients start flying uncontrollably and eventually crash, as seen in the video. It seems like both collisions and FPS drops contribute to the issue. Any ideas?

Unreal Engine doesn’t use a fixed update for physics. It goes through the tick which means that with lower framerate you have larger collision penetrations and larger rollbacks. This means larger difference between server and client.

You can find physics framerate settings in your Project Settings → Engine → Physics.


You can try physics prediction and replication while you are there.

The network settings for position smoothing are inside the movement component:

Play around with those, mainly allow for more time to correct and larger allowances.

However, if you can make the correction in the beginning (on hit) it might blend with the initial jerk. This will require you to replicate the initial conditions or the resulting position and force from the server to the client.

Also double check the obstacle position and orientation. Maybe try with something with simpler collider geometry if its not a primitive already.

1 Like