Hello!
I was wondering how you exactly move the player server wise.
The thing is that I have a singleton round manager, that has a method to restart the round, which basically just sets all the players transform.position to their spawn position. However, I’m struggling with syncing it properly.
Should I use an ClientRPC or what? Seems like a command does nothing.
You can do that with an RPC call, yes. The basic idea would be:
public class Player : NetworkBehaviour {
[Server]
public void MoveTo(Vector3 newPosition) { //call this on the server
transform.position = newPosition; //so the player moves also in the server
RpcMoveTo(position);
}
[ClientRPC]
void RpcMoveTo(Vector3 newPosition) {
transform.position = newPosition; //this will run in all clients
}
}
Or with a SyncVar:
public class Player : NetworkBehaviour {
[SyncVar(hook = "MoveTo")]
public Vector3 syncPosition; //set this in the server, and set the transform.position manually too, since the hook only runs on clients
void MoveTo(Vector3 newPosition) {
transform.position = newPosition; //this will run in all clients
}
}