Replicating Character Rotation in Top-Down MP

I’ve been wrestling with this for a couple of days now and don’t understand what’s going wrong with replicating my characters rotations in MP.

The first image attached shows how I’m controlling rotation of the player. I want the character to rotate to the direction that the right thumbstick is pointed, and rotate at a speed that I can define, so I’m rotating the character mesh instead of the pawn itself (which, as far as I can tell, will only rotate instantly and not work with any of the interpolation-over-time functions).

The second image shows how I’ve modified the Blueprint to try to get rotation to replicate in a multiplayer game.

With this Blueprint, on a listen server:

  • Each character can see themselves
    rotate.
  • The server can see the client
    rotate.
  • The client can NOT see the
    server rotate.

On a dedicated server:

  • Each character can see themselves rotate.
  • Neither client can see the other rotate.

It seems like the information is not being replicated to the clients from the server, but I don’t understand why the “ReplicationRotation” event isn’t casting it to all the clients.

Any help here would be very appreciated! I’ve read a couple of other threads about similar problems, but it seems like all of them end up using pawn rotation, which I can’t use because of the lack of rotation-interpolation-over-time.

Have you tried passing the actor reference into the function to run on the server?

It may be as simple as the server not knowing what actor you want to rotate.
Also, i thought that simply by enabling replication on the actor its position/rotation and any exposed variables replicated.

Thanks for the quick response. I’m still fairly new to BPs - can you be more explicit about how I would pass the actor reference? I’ve looked at the Set and Get Actor References and Referencing Actors in Blueprints pages but am still unclear how exactly I would do that here. Can you point me in a direction?

From what I’ve read, enabling replication on rotation isn’t always as simple as pure movement. Since I’m rotating just the mesh (because I can’t rotate the actor via interpolation, only “Rotate Actor” which forces instantaneous rotation), that isn’t automatically replicated.

When you edit your function that runs on the server, you should be able to setup an “input” of a certain type, once you do, you can drag the actor reference into that. on the server execution node, drag the reference out into the rotation (instead of using self, which the server/clients won’t know unless we tell them which actor to rotate)

Hello @MonsterDrew, have you find solution for this?

I have a solution for this Topdown WASD to move and mouse to aim. you should use the Set Control Rotation in tick or however you want to look at the mouse position and set the 2 Add Movement Input (world direction X=1, Y=0, Z=0) for X and Y (world direction X=0, Y=1, Z=0). and make sure if rotating in tick use is locally controlled is controlling the flow, you don’t want your clients looking at a single mouse position.