Hello. I am encountering a problem in Unity3D. Everytime I want a message to show up, there is a NullReferenceException. I have problems with the while loop as well as the foreach statement.
This is my code. It seems to only be failing at around line 76, line 29, and line 31, so everything that has to do with the AddChatMessage function.
using UnityEngine;
using System.Collections.Generic;
public class NetworkManager : MonoBehaviour {
public GameObject standbyCamera;
SpawnSpot[] spawnSpots;
public bool offlineMode = false;
bool connecting = false;
List<string> chatMessages;
int maxChatMessages = 5;
// Use this for initialization
void Start () {
spawnSpots = GameObject.FindObjectsOfType<SpawnSpot>();
PhotonNetwork.player.name = PlayerPrefs.GetString ("Username", "N00B");
Debug.Log (chatMessages);
}
void OnDestroy() {
PlayerPrefs.SetString ("Username", PhotonNetwork.player.name);
}
public void AddChatMessage(string m) {
Debug.Log (chatMessages);
chatMessages.Add(m);
while(chatMessages.Count >= maxChatMessages) {
chatMessages.RemoveAt(0);
}
Debug.Log ("Added: " + m);
}
void Connect() {
PhotonNetwork.ConnectUsingSettings("0.11");
}
void OnGUI() {
GUILayout.Label(PhotonNetwork.connectionStateDetailed.ToString());
if(PhotonNetwork.connected == false && connecting == false) {
GUILayout.BeginArea (new Rect(0, 0, Screen.width, Screen.height));
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
GUILayout.BeginHorizontal();
GUILayout.Label("Username: ");
PhotonNetwork.player.name = GUILayout.TextField (PhotonNetwork.player.name);
GUILayout.EndHorizontal();
if(GUILayout.Button("Single Player")) {
connecting = true;
PhotonNetwork.offlineMode = true;
OnJoinedLobby ();
}
if(GUILayout.Button ("Multi-Player")) {
connecting = true;
Connect ();
}
GUILayout.FlexibleSpace();
GUILayout.EndVertical();
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
GUILayout.EndArea ();
}
if(PhotonNetwork.connected == true && connecting == false) {
GUILayout.BeginArea (new Rect(0, 0, Screen.width, Screen.height));
GUILayout.BeginVertical();
GUILayout.FlexibleSpace();
foreach(string msg in chatMessages) {
GUILayout.Label(msg);
}
GUILayout.EndVertical();
GUILayout.EndArea ();
}
}
void OnJoinedLobby() {
Debug.Log("Joined Lobby");
PhotonNetwork.JoinRandomRoom();
}
void OnPhotonRandomJoinFailed() {
Debug.Log ("No Open Rooms!");
PhotonNetwork.CreateRoom(null);
}
void OnJoinedRoom() {
Debug.Log ("Joined room");
connecting = false;
SpawnMyPlayer();
}
void SpawnMyPlayer() {
AddChatMessage ("Spawning player: " + PhotonNetwork.player.name);
Debug.Log ("Added Name");
SpawnSpot mySpawnSpot = spawnSpots[Random.Range(0, spawnSpots.Length)];
GameObject myPlayerGO = (GameObject)PhotonNetwork.Instantiate("PlayerController", mySpawnSpot.transform.position, mySpawnSpot.transform.rotation, 0);
standbyCamera.SetActive(false);
//((MonoBehaviour)myPlayerGO.GetComponent("FPSInputController")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent("MouseLook")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent("PlayerMovement")).enabled = true;
((MonoBehaviour)myPlayerGO.GetComponent("PlayerShooting")).enabled = true;
//((MonoBehaviour)myPlayerGO.GetComponent("CharacterMotor")).enabled = true;
myPlayerGO.transform.FindChild("Main Camera").gameObject.camera.enabled = true;
Debug.Log (PhotonNetwork.isMasterClient);
}
}