

In Start(), we determine the computer's Local IP Address using Dns.GetHostEntry(Dns.GetHostName()) from. Now, in the JoinPlayer() RPC, we have this critical comparison: if(p.ipAddress=LocalAddress) which is removed when a player disconnects with something very similar in the DisconnectPlayer() RPC: players.Remove(player) This is done in the JoinPlayer() RPC with this simple command: players.Add(p,newPlayer) The player object must be created on all clients and the server, and this is the simplest way of accomplishing that.Īlso, notice that the server AND the client is maintaining the HashTable of all players. Notice that we are using RPCMode.All - which will send the JoinPlayer() RPC to all players and the server. In OnPlayerConnected(), we execute this RPC call to all connected clients using the server's world networkView. OK, let's look at the important parts, starting with our first RPC in OnPlayerConnected() networkView.RPC("JoinPlayer", RPCMode.All, newViewID, Vector3.zero, p) If you haven't done so already, grab the Unity package and open up the networkController script so you can follow along. I should probably mention that before we get too far into things and PFDs start flying all over the place. Did I mention that I <3 process flow diagrams. To help explain how this is accomplished, let's take a look at a process flow diagram.

We're not going to take the standard route. Using this setup, EACH player will have its own chatty NetworkView sending out information to everyone else more or less continuously. If you start digging through LOTS of other Unity Networking tutorials, they'll follow the "standard route" of adding a NetworkView to your player prefab and then relying on Unity to decide when to send updates, and how much data will be sent. Unity Networking Sample Using One NetworkView So, what does that leave us with? It leaves us with.
DOWNLOAD NETWORKVIEW FULL VERSION CODE
Update: I recently found a good way to do Server Discovery for the LAN, please post a comment if you'd like me to post that code as well :) I really wanted to do this as a true peer-to-peer, but Unity's built-in networking is geared strictly for client-server networking. And finally, RemoveRPCs (RPC = "Remote Procedure Call") only works when you are using Network.Instantiate, so it goes out the window as well. Network.Instantiate also generates so much network traffic that the game can pause and skip every time a new player joins. I picked these three because NetworkViews (even when set to "Unreliable") can create a lot of unnecessary network traffic if they are not managed very carefully. The components I decided to avoid were NetworkViews, Network.Instantiate, and RemoveRPCs. Avoid (as much as possible) the "exotic" Unity networking components.I set out to make a simple peer-to-peer FPS sample project with two goals in mind: Networking is definitely one of those parts. Unity is a great tool for Indie developers, but there are parts of it that can really make you spin around in circles. This Unity Package can be downloaded here (updated): fps_sample_2013_02_21.unitypackage
