- Home /
 
Is this the right setup for a multiplayer game?
I took some tutorials and put together a deathmatch car game. In the editor I have every object I want to spawn as a prefab and put some objects directly on the scene. I put a Network View on all of my prefabs and objects.
From what I understand Unity now synchronizes these objects automatically in a network game. Is this correct?
I instantiate all my spawning Elements with Network.Instantiate like this:
 instantiatedBullet = (GameObject)Network.Instantiate(Resources.Load("Bullet"), muzzleTransform.position, muzzleTransform.rotation * bulletRotation, 0);
 
               Now, the problem is that all objects spawn correctly and are seen in the game except the main player (= car). I think it has to do with assigning a correct NetworkViewID to my player object. This is my network code taken from some tutorial.
 #pragma strict
 var gameName : String = "DM Car Project X";
 private var refreshing:boolean;
 private var hostData:HostData[];
 private var btnX:float;
 private var btnY:float;
 private var btnW:float;
 private var btnH:float;
 
 private var playerPrefab:GameObject;
 var spawnPoint:GameObject;
 
 function Start () {
     btnX = Screen.width * 0.05;
     btnY = Screen.width * 0.05;
     btnW = Screen.width * 0.2;
     btnH = Screen.width * 0.1;
 }
 
 function Update () {
 
 if(refreshing) {
     if(MasterServer.PollHostList().Length>0) {
         refreshing = false;
         Debug.Log("HostList: "+MasterServer.PollHostList().Length);
         hostData = MasterServer.PollHostList();
     }
 }
     
 
 }
 
 function OnGUI () {
     if(!Network.isClient && !Network.isServer) {
         if(GUI.Button(Rect(btnX, btnY, btnW, btnH), "Start server!")) {
             Debug.Log("Starting Server...");
             startServer();
         }
         if(GUI.Button(Rect(btnX, btnY * 1.2 + btnH, btnW, btnH), "Refresh Hosts")) {
             Debug.Log("Refreshing Hosts...");
             refreshHostList();
         }
         
         if(hostData) {
             for(var i:int = 0; i < hostData.length; i++) {
                 if(GUI.Button(Rect(btnX * 1.5 + btnW, btnY * 1.2 + (btnH*i), btnW*3, btnH), hostData[i].gameName )) {
                     Network.Connect(hostData[i]);
                 }
             }
         }
     }
 }
 
 function startServer() {
     Network.InitializeServer(4,25001, !Network.HavePublicAddress);
     MasterServer.RegisterHost(gameName, "Car Test Game", "Test game project X... ;)");
 }
 
 function refreshHostList () {
     MasterServer.RequestHostList(gameName);
     refreshing = true;
 }
 
 function spawnPlayer() {
     var car : GameObject = Network.Instantiate(Resources.Load("Car"), spawnPoint.transform.position, Quaternion.identity, 0);
 
     car.active = true;
 
     Debug.Log("gespawnt!");
 }
 
 function OnServerInitialized() {
     Debug.Log("Server initialised!");
     spawnPlayer();
 }
 
 function OnMasterServerEvent(mse:MasterServerEvent) {
     if(mse == MasterServerEvent.RegistrationSucceeded) {
         Debug.Log("Server registered!");
     }
 }
 
 function OnConnectedToServer() {
     spawnPlayer();
 }
 
               I cannot seem to get the logic of assigning the right network views. If I Network.Instantiate, do I need a Network View on the object? Do I create a global array for all my players and assign the NetworkViewID to this array?
Your answer