2015-07-28 1 views
0

J'essaie personnalisé NetworkManager mais il continue à donnerPourquoi mon singleton est-il nul?

NullReferenceException

... dans la commande NetworkManager.singleton.StartHost();

le problème est à la ligne NetWorkManager.Singleton.StartHost(); dans le auj StartGame(); toujours revenir

... et je ne sais pas pourquoi ça arrive

Voici le code.

using UnityEngine; 
using UnityEngine.Networking; 
using System.Collections; 
using UnityEngine.UI; 

public class NetManager : NetworkManager { 

    public Transform Bombeiro, Cnen, Policial, Suspeito,IaTeamPlayer; 
    public string ServidorIP, NomeUsuario; 
    private GameObject WayPoint; 
    public int GrupoAvatar; 
    public bool IniciarServidor; 
    public GameObject Lacamera,menu; 
    private Transform IA; 
    private MandaRad recptor; 
    private SobeRampa CodigoSubida; 
    public GameObject[] BombeiroSpawnPoints; 
    public GameObject[] PolicialSpawnPoints; 
    public GameObject[] SuspeitoSpawnPoints; 
    public GameObject[] CnenSpawnPoints; 
    private GameObject[] pedestres; 
    GameObject spawnPos; 
    void Awake() 
    { 
     BombeiroSpawnPoints = GameObject.FindGameObjectsWithTag("spawnBombeiroTeam"); 
     PolicialSpawnPoints = GameObject.FindGameObjectsWithTag("spawnPolicialTeam"); 
     SuspeitoSpawnPoints = GameObject.FindGameObjectsWithTag ("spawnSuspeitoTeam"); 
     CnenSpawnPoints = GameObject.FindGameObjectsWithTag ("spawnCnemTeam"); 
    } 

    public void ServerIni (bool iniciar) 
    { 
     IniciarServidor = iniciar; 
    } 

    public void PegaCampoIP(GameObject IP) 
    { 
     if (IP.GetComponent<InputField>().text == "") 
      ServidorIP = IP.GetComponent<InputField>().placeholder.GetComponent<Text>().text; 
     else 
      ServidorIP = IP.GetComponent<InputField>().text; 
    } 

    public void PegaCampoNome(GameObject Nome) 
    { 
     if (Nome.GetComponent<InputField>().text == "") 
      NomeUsuario = Nome.GetComponent<InputField>().placeholder.GetComponent<Text>().text; 
     else 
      NomeUsuario = Nome.GetComponent<InputField>().text; 
    } 

    public void EscolherAvatar (int grupo) 
    { 

     if (GrupoAvatar == 0) 
     { 
      spawnPos = BombeiroSpawnPoints[Random.Range(0, BombeiroSpawnPoints.Length)]; 
      base.playerPrefab = Bombeiro.gameObject; 
      base.spawnPrefabs.RemoveAt(0); 
      base.spawnPrefabs.Add(spawnPos); 
     } 
     else if (GrupoAvatar == 1) 
     { 
      spawnPos = CnenSpawnPoints[Random.Range(0, CnenSpawnPoints.Length)]; 
      base.playerPrefab = Cnen.gameObject; 
      base.spawnPrefabs.RemoveAt(0); 
      base.spawnPrefabs.Add(spawnPos); 
     } 
     else if (GrupoAvatar == 2) 
     { 
      spawnPos = PolicialSpawnPoints[Random.Range(0, PolicialSpawnPoints.Length)]; 
      base.playerPrefab = Policial.gameObject; 
      base.spawnPrefabs.RemoveAt(0); 
      base.spawnPrefabs.Add(spawnPos); 
     } 
     else if (GrupoAvatar == 3) 
     { 
      spawnPos = SuspeitoSpawnPoints[Random.Range(0, SuspeitoSpawnPoints.Length)]; 
      base.playerPrefab = Suspeito.gameObject; 
      base.spawnPrefabs.RemoveAt(0); 
      base.spawnPrefabs.Add(spawnPos); 
     } 

     if (IniciarServidor) 
      StartGame(); 
     else 
      JoinGame(); 
    } 

    public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) 
    { 
     GameObject player = (GameObject)Instantiate (base.playerPrefab, spawnPos.transform.position, spawnPos.transform.rotation); 
     NetworkServer.AddPlayerForConnection (conn, player, playerControllerId); 
    } 

    public void StartGame() 
    { 
     NetworkManager.singleton.StartHost(); 
    } 

    public void JoinGame() 
    { 
     NetworkManager.singleton.networkAddress = ServidorIP; 
     NetworkManager.singleton.StartClient(); 
    } 
} 

Il a été fait à l'unité 5 Alors, comment je peux résoudre ce ??

+4

Je ne pense pas que vous devriez dérivez un nouveau type de 'NetworkManager' en premier lieu. – MickyD

+1

La propriété singleton est une propriété statique de la classe de base. Il n'est pas clair comment il est instancié. Il est également presque certain que même s'il est instancié, il s'agira d'une instance de la classe de base (NetworkManager) au lieu de votre classe dérivée (NetManager). Semble à la mauvaise direction/architecture pour moi. –

+0

Copie possible de [Qu'est-ce qu'une exception NullReferenceException et comment la réparer?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

Répondre

0

Je pense que vous n'avez peut-être pas initialisé NetworkManager.singleton? L'avez-vous déjà utilisé comme instance de NetworkManager?

+0

merci les hommes j'ai oublié d'instancier un nouvel objet NetworkManager –

0

Cela est dû au fait que vous remplacez la fonction Réveil. Il n'est pas marqué, mais j'ai trouvé que l'implémentation du Awake bloque l'assignation Unity standard du singleton.

, retirez votre Awake ou ne singleton = vous-même