Open the game scene, select the Player GameObject in the Hierarchy.
Click the Add Component button and Search "Agent", select Realtime Agent to attach it to the Player GameObject.
You will see that a Network ID component was attached to Player GameObject automatically. Network ID component helps SWNetwork to identify a GameObject. Set its Type to "Player" as the GameObject will be controlled by the player.
Transform
The RealTime Agent send GameObject's position, rotation updates to its remote duplicates.
The Player GameObject moves in X, Y, Z directions, we need to enable all of them.
The Min, Max, and Resolution settings are used to compress the X, Y, Z values.
In this game, the player moves between -20 to 20 in the X-axis, 0 to 3 in the Y-axis, and -20 to 20 in the Z-axis. You can use these limits to set the compression settings.
Rotation
The Player GameObject rotates around the Y-axis. We should enable Y for Rotation. We can set the resolution to Ten as we do not need high precision for rotation. The Y rotation value that remote duplicates receive will be like: 0, 10, 20 ... 360.
Interpolate field controls the interpolation of rotation and scale updates. The larger the number the faster the GameObject interpolates to the target rotation and scale.
Smooth Level field controls the smoothness of position updates. The larger the number the smoother the GameObject moves to the target position. However, a larger smooth level will affect the GameObjects responsiveness.
Read Function field controls in which function the remote duplicates will read the position updates.
You can use the settings in the below screenshot to config the RealTime Agent.
Updating the PlayerMovement.cs script
You need to update the PlayerMovement.cs script so that only the source Player GameObject receives user inputs. Use the IsMine property of NetworkID to find out if the Player GameObject is the source GameObject.
Also, set the camera to follow the source Player GameObject.