Unet rigidbody.AddForce not working for clients

Me and my friend are making a multiplayer survival game and we wanted to add in a boat. We have a script attached on it(BoatMover.cs) and in the PlayerController.cs we check if the user is near a boat and parent the player to it.

In the BoatMover.cs we just check for input and add force accordingly. Everything is fine on the host and the boat is moving but on the client it’s a different story. The force is being added to the boat but something else is preventing it from moving. The sync mode on the boat is set to SyncRigidbody3D but when i change it to SyncTransform everything is working, but my boat movement is jittery and it’s not the solution to the problem. I don’t understand why this is happening and i would appreciate if you could help me.
Here is my BoatMover.cs:

  if (keyPressedW)
        {
            rigid.AddForce(transform.right * 500 * Time.deltaTime);
	    }
        if (keyPressedS)
        {
            rigid.AddForce(-transform.right * 500 * Time.deltaTime);
	    }
	    if (keyPressedD) {
            rigid.AddTorque(transform.up * 200 * Time.deltaTime);
	    }
        if (keyPressedA)
        {
            rigid.AddTorque(-transform.up * 200 * Time.deltaTime);
        }

Thanks in advance!

I would suggest syncing Transforms. There are a few occasions where syncing rigidbodies would be the best choice. In an FPS game, syncing rigidbodies may not always be accurate. The player may be a few millimeters off, but it could affect gameplay. There may also be times where players will glitch through or spasm out because of these small differences.

When syncing Transforms, you’re sending the exact coordinate of where the GameObject should be. Therefore, it’s going to update it. This is exactly what it’s supposed to do.

The better solution is to not directly set the position on the other person’s client. What you want to do is take that into a lerp function. Something like this:

transform.position = Vector3.Lerp(transform.position, targetPosition, 3 * Time.deltaTime);

You will want to play with the ‘3’. Also note that targetPosition would be the Transform that the player should go to (the Transform value you are sending to the other client).

If you have questions, let me know.