This guide follows on from the work completed in Your First Networking Game "Hello World". You should complete that guide before starting this one.
- Click the Assets folder.
- Create a new Folder and call it Scripts.
- Create an empty GameObject rename it HelloWorldManager.
- Create a script called
- Add the
HelloWorldManagerscript as a component.
- Open the
- Edit the
HelloWorldManager.csscript to match the following.
You can copy the script from here and paste it into your file.
- Select the code sample.
- Click Copy in the top right corner.
- Paste it into your code editor.
HelloWorldManager.cs script, we will define two methods which mimic the editor buttons inside of NetworkManager during Play mode.
NetworkManager implements the singleton pattern as it declares its singleton named
Singleton. This is defined when the
MonoBehaviour is enabled. This component also contains very useful properties, such as
IsLocalClient. The first two dictate the connection state we have currently established that you will use shortly.
We will call these methods inside of
You will notice the introduction of a new method,
SubmitNewPosition(); which we will be using later.
Create a new script
HelloWorldPlayer.csscript to match the following.
- Select the Player Prefab.
- Add the script
HelloWorldPlayerscript as a component.
This class will inherit from
NetworkBehaviour instead of
Inside this class we will define a
NetworkVariable to represent this player's networked position.
We introduce the concept of ownership on a
NetworkVariable (read and write permissions). For the purposes of this demo, the server will be authoritative on the
NetworkVariable representing position. All clients are able to read the value, however.
NetworkBehaviour can override the MLAPI method
NetworkStart(). This method is fired when message handlers are ready to be registered and the networking is setup. We override
NetworkStart since a client and a server will run different logic here.
This can be overriden on any
On both client and server instances of this player, we call the
Move() method, which will simply do the following.
If this player is a server-owned player, at
NetworkStart() we can immediately move this player, as suggested in the following code.
If we are a client, we call a server RPC.
This server RPC simply sets the position
NetworkVariable on the server's instance of this player by just picking a random point on the plane.
The server instance of this player has just modified the Position NetworkVariable, meaning that if we are a client, we need to apply this position locally inside of our Update loop.
We can now go back to
HelloWorldManager.cs and define the contents of
Whenever you press the GUI button (which is contextual depending on if you are server or a client), you find your local player and simply call
You can now create a build which will demonstrate the concepts outlined above.
Make sure SampleScene is included in BuildSettings.
One build instance can create a host. Another client can join the host's game. Both are able to press a GUI button to move. Server will move immediately and be replicated on client. Client can request a new position, which will instruct the server to modify that server instance's position
NetworkVariable. That client will apply that
NetworkVariable position inside of it's Update() method.
Congratulations you have learnt the basics of a networked game