1.3. Sending commands
Using the same scene as in the previous lesson, we now take a look at another way to make Clients communicate: Network Commands. Network Commands are like sending direct messages to objects, instead of syncing the value of a variable.
- WASD or Left stick: Move character
- Hold Shift or Shoulder button left: Run
- Spacebar or Joypad button down: Jump
- Q or D-pad up: Wave
Building on top of previous examples, let's now focus on two key player actions. Press Space to jump, or Q to wave. For both of these actions to play their animation, we need to send a command over the network to call
Animator.SetTrigger()on the other Client.
Two connected players waving at each other.
Like before, select the player Prefab located in the
Characters/Player__ folder, and browse the Hierarchy until you find the sub-object called PlayerModel.
Open the coherence Configure window on the Methods tab:
You can see how the method
Animator.SetTrigger(string)has been marked as a Network Command. Once this is done, it is possible to invoke it over the network.
You can find the code doing so in the
Hailclass (located in
sync.SendCommand<Animator>(nameof(Animator.SetTrigger), MessageTarget.Other, "Hail");
With this simple line of code, we're asking to:
- Send a command to an object of class
- Invoke a method called
- Do so only for network entities other than the one with authority (
- Pass the string
"Hail"as the first parameter (which is the name of the animation trigger parameter).
Because we don't invoke this on the one with authority, you will notice that just before invoking the Network Command, we also call
SetTriggerlocally in the usual way:
An alternative to avoid this would have been to pass
CoherenceSync.SendCommand(), but in this case it made more sense to avoid that additional network traffic and just execute locally.
In this example we used a Network Command to trigger a transition in an animation state machine, but they can be used to call any instantaneous behavior that has to be replicated over the network. As an example, it is also used in the Persistence sample to change a number in a UI element across all Clients.