It doesn’t work because replicated variables are only replicated one way, from Server to Client. If you want an event to happen on the server from the client you can make a function and set it’s replication to Run on server, anything after that event will be run on the server. In general advice, you should not trust your clients with important game data such as health, etc.
Because you turned off replication on your variable. The function is being called on the server but because it’s not replicated, it isn’t set on the clients. I would recommend you watch the Unreal Networking Basics tutorial as that really helped me to understand what’s happening where. Link.
I also noticed that R will only be called when R is pressed on the server. You should make a custom event to call. The replication will also not be instant. If you need to do something when a variable is updated you can set it’s replication to RepNotify which will call a function when it is updated in the client and server. I made an example real quick here. The red comments are only run on the server.
I have a use case where I need to update a variable from client to server. Both the server and client have an index number that they share but I can only replicate the variable from server to client. I am pretty sure after extensive testing that this behaviour is inherent and I won’t be able to update the variable from the client. I am not having much success using a replicated function to update the server however.
Same here, it kind of works but my variable updates a value which is bound to some text on a UMG, when I increment from the server both client and server values change, if I increment from the client the UMG doesn’t update on the server. Going back to increment from server will reset the variable to the servers value for the client?
I’m replicating the variable on an actor which is replicated, documentation could be better.
Sorry but there a A LOT of basic networking example out there (for example in my signature) and Epic made training videos about this.
The basic networking and replication part is documented enough to understand it.
As long as you guys don’t post pictures and information about your attempts, i can only say that you’re doing something wrong.
You need to make sure that the actor you’re trying to call RPCs on is set to “Replicate” and is actually owned by the Client (so the PlayerController of the Client is set as the owner).
A possessed PlayerCharacter is owned by the Client, but you need to make sure that in the ClassDefaults, “Replicates” is set to true. If the Actor is not owned by the Client (for example
spawned by the Server without setting the correct owner or just placing the Actor in the scene), then the “Client to Server” call will be dropped and never reach the Server.
Then you need a replicated Variable. This can only be set by the Server. So the way @LazyLoading posted is correct.
It doesn’t have to be “RepNotify” if you don’t want to do stuff when the Replication is done. "RepNotify" is only needed if you need a function that is called on the Client once the Replication is done.
These are the “OnRep_” functions you see in the function list of @LazyLoadings pictures. They are created
automatically once you set a variable to “RepNotify”. But you might only need the normal “Replicate”.
If you print the Variable too fast it might still be the old value. Replication takes a really short time, but it’s enough time to actually see old values of you are too fast.
When the Numbers don’t change at all, make sure that the P and O buttons are actually called (PrintString or Breakpoints) and then that the ServerPKey and ServerOKey
are called (again, PrintString or Breakpoints).
I know it’s frustrating if it doesn’t work. That’s why we recommend beginners to first learn the Engine in SinglePlayer Games before moving to Networking.
It’s a whole new level and the learning curve is pretty high.
Try to fiddle around with the basic replication. Watch Epic Networking Videos on Youtube and check out Games like BallBump in my Free Project or
the Multiplayer Shootout of Epic.