Yes, generally large data is sent in multiple goes and steadily built-up on the client side. I’d first send some text metadata ahead of the file itself so that the client has expectations of what the final object should look like, then when those expectations are fulfilled you can fire off a callback stating that the object has arrived intact and is fully loaded. This is an example of asynchronous downloading, and you need to build very robust error detection and handling in order to handle this process reliably. That’s getting away from replicated gameplay and more into web development fundamentals, though.
Would be nice to see also examples to use “Gameplay Ability System” aka. GAS and it’s features for validation of replications without the need of implementing own solutions.
As I understand, GAS has build-in to start actions directly on client side to show the player all action without delay, but than send it to server for validation and if some mismatch happens. also it can reset/undo the action (stop animation, etc.).
Would be nice to see this in action in next “Network Multiplayer” tutorials.
@MikhailPrinke
Something that is not clear to me after making 3 multiplayer games, is how you get a reference of a player to drive logic, for instance in our game we can cast votes to a player, if the player has an X amount of votes against him, he gets sentence to die. The casting we handle it through line traces and rpcs, but how can we make it so that we check for the amount of votes on a player, we tried player ID, through the player state, but for some reason it changes when someone join into the session.
The other thing is how to handle visibility through classes or teams online, in the link attached there are two ghost and a player, the ghost should see each other but the player shouldn’t be able to see them.