Search Unity

[Solved] Player Prefab not finding references

Discussion in 'Multiplayer' started by SkyTech6, Oct 17, 2016.

  1. SkyTech6

    SkyTech6

    Joined:
    Jul 14, 2015
    Posts:
    151
    Hey, so I have a Lobby Network Manager set up and for some reason when two players connect (using the same prefab) player 1's references in the player script aren't found, but player 2 does. Even though they are the same script finding the same references.

    Code (CSharp):
    1.  
    2. using UnityEngine;
    3. using UnityEngine.Networking;
    4. using System.Collections;
    5.  
    6. public class NetworkPlayerScript : NetworkBehaviour
    7. {
    8.     [SerializeField]
    9.     Behaviour[] componentsToDisable;
    10.  
    11.     GameManager manager;
    12.     Player p;
    13.  
    14.     //SpawnPoints
    15.     public GameObject P1Spawn;
    16.     public GameObject P2Spawn;
    17.     public GameObject P3Spawn;
    18.     public GameObject P4Spawn;
    19.  
    20.     public int playerNumNet = 0;
    21.     public string skin;
    22.  
    23.  
    24.     void Start ()
    25.     {
    26.         Debug.Log ("Local: " + isLocalPlayer);
    27.         if (!isLocalPlayer)
    28.         {
    29.             for (int i = 0; i < componentsToDisable.Length; i++)
    30.             {
    31.                 componentsToDisable[i].enabled = false;
    32.             }
    33.         }
    34.         else
    35.         {
    36.          
    37.         }
    38.  
    39.         manager = GameObject.FindGameObjectWithTag("GM").GetComponent<GameManager>();
    40.         P1Spawn = manager.p1Spawn.gameObject;
    41.         P2Spawn = manager.p2Spawn.gameObject;
    42.         P3Spawn = manager.p3Spawn.gameObject;
    43.         P4Spawn = manager.p4Spawn.gameObject;
    44.  
    45.         if (gameObject.GetComponent<Player> ().ai == false)
    46.             Invoke ("CmdSpawnPlayers", 2f);
    47.     }
    48.  
    49.     [Command]
    50.     public void CmdSpawnPlayers()
    51.     {
    52.         switch (playerNumNet)
    53.         {
    54.         case 1:
    55.             this.transform.position = P1Spawn.transform.position;
    56.             this.GetComponent<Player> ().startAngle = 45f;
    57.             CmdPlayer1Setup ();
    58.             RpcOnlineAssignSkin ();
    59.             Debug.Log ("Player1");
    60.             break;
    61.         case 2:
    62.             this.transform.position = P2Spawn.transform.position;
    63.             this.GetComponent<Player> ().startAngle = 225f;
    64.             CmdPlayer2Setup ();
    65.             RpcOnlineAssignSkin ();
    66.             Debug.Log ("Player2");
    67.             break;
    68.         case 3:
    69.             this.transform.position = P3Spawn.transform.position;
    70.             this.GetComponent<Player> ().startAngle = 234f;
    71.             CmdPlayer3Setup ();
    72.             RpcOnlineAssignSkin ();
    73.             Debug.Log ("Player3");
    74.             break;
    75.         case 4:
    76.             this.transform.position = P4Spawn.transform.position;
    77.             this.GetComponent<Player> ().startAngle = 343f;
    78.             CmdPlayer4Setup ();
    79.             RpcOnlineAssignSkin ();
    80.             Debug.Log ("Player4");
    81.             break;
    82.         }
    83.     }
    84.  
    85.     [Command]
    86.     public void CmdPlayer1Setup()
    87.     {
    88.         manager.player1Connected = true;
    89.         this.tag = "Player1";
    90.         this.name = "Player1";
    91.         manager.numberOfPlayers++;
    92.         manager.ResetReadyCheck ();
    93.     }
    94.  
    95.     [Command]
    96.     public void CmdPlayer2Setup()
    97.     {
    98.         manager.player2Connected = true;
    99.         this.tag = "Player2";
    100.         this.name = "Player2";
    101.         manager.numberOfPlayers++;
    102.         manager.ResetReadyCheck ();
    103.     }
    104.  
    105.     [Command]
    106.     public void CmdPlayer3Setup()
    107.     {
    108.         manager.player3Connected = true;
    109.         this.tag = "Player3";
    110.         this.name = "Player3";
    111.         manager.numberOfPlayers++;
    112.         manager.ResetReadyCheck ();
    113.     }
    114.  
    115.     [Command]
    116.     public void CmdPlayer4Setup()
    117.     {
    118.         manager.player4Connected = true;
    119.         this.tag = "Player4";
    120.         this.name = "Player4";
    121.         manager.numberOfPlayers++;
    122.         manager.ResetReadyCheck ();
    123.     }
    124.  
    125.     [ClientRpc]
    126.     public void RpcOnlineAssignSkin()
    127.     {
    128.         Debug.Log (playerNumNet + ": " + skin + "attempting to assign..." );
    129.         switch (skin) {
    130.         case "Blue":
    131.             p.blueWizard.GetComponent<SpriteRenderer> ().enabled = true;
    132.             p.blueWizard.GetComponentInChildren<SpriteRenderer> ().enabled = true;
    133.             break;
    134.         case "Red":
    135.             p.redWizard.GetComponent<SpriteRenderer> ().enabled = true;
    136.             p.redWizard.GetComponentInChildren<SpriteRenderer> ().enabled = true;
    137.             break;
    138.         case "Green":
    139.             p.greenWizard.GetComponent<SpriteRenderer> ().enabled = true;
    140.             p.greenWizard.GetComponentInChildren<SpriteRenderer> ().enabled = true;
    141.             break;
    142.         case "Purple":
    143.             p.purpleWizard.GetComponent<SpriteRenderer> ().enabled = true;
    144.             p.purpleWizard.GetComponentInChildren<SpriteRenderer> ().enabled = true;
    145.             break;
    146.         }
    147.     }
    148. }
    149. }
    And this is the only related error I get

    Any thoughts? Any more information I could give? Any help would be HIGHLY appreciated as this has me completely stumped.

    UPDATE: Player1 was spawning before the GameManager did, so fixed load order.
     
    Last edited: Oct 17, 2016