- Home /
I have an error saying its not set to an instance of an object althoug i have set it to an object. Please Help ??
This is the error :
NullReferenceException: Object reference not set to an instance of an object MenuManager.Menu_Main () (at Assets/MyScripts/MenuManager.cs:40) MenuManager.OnGUI () (at Assets/MyScripts/MenuManager.cs:20)
using UnityEngine;
using System.Collections;
public class MenuManager : MonoBehaviour
{
public string CurrentMenu;
public string MatchName;
public string MatchPassword;
public int MatchMaxPlayers = 32;
void start()
{
CurrentMenu = "Main";
}
void OnGUI()
{
if (CurrentMenu == "Main")
Menu_Main ();
if (CurrentMenu == "Lobby")
Menu_Lobby ();
if (CurrentMenu == "Host")
Menu_HostGame ();
}
public void NavigateTo(string nextmenu)
{
CurrentMenu = nextmenu;
}
private void Menu_Main()
{
if(GUI.Button(new Rect(10, 10, 200, 50), "Host Game"))
{
NavigateTo("Host");
}
GUI.Label (new Rect (220, 10, 130, 30), "Player Name");
MultiplayerManager.instance.PlayerName = GUI.TextField (new Rect (325, 22, 200, 30), MultiplayerManager.instance.PlayerName);
}
private void Menu_HostGame()
{
//Buttons Host Game
if (GUI.Button(new Rect(10, 10, 200, 50), "Back"))
{
NavigateTo("Main");
}
if (GUI.Button (new Rect (10, 60, 200, 50), "Start Server"))
{
MultiplayerManager.instance.StartServer(MatchName, MatchPassword, MatchMaxPlayers);
}
GUI.Label (new Rect (220, 26, 200, 20), "Match Name");
MatchName = GUI.TextField (new Rect (325, 22, 200, 30), MatchName);
GUI.Label (new Rect (220, 66, 200, 20), "Match Password");
MatchPassword = GUI.PasswordField (new Rect (325, 62, 200, 30), MatchPassword, "*"[0], 25);
GUI.Label (new Rect (220, 106, 200, 20), "Max Players");
GUI.Label (new Rect (320, 107, 200, 30), MatchMaxPlayers.ToString());
MatchMaxPlayers = Mathf.Clamp (MatchMaxPlayers, 8, 32);
if (GUI.Button (new Rect (370, 104, 20, 20), "+"))
MatchMaxPlayers += 1;
if (GUI.Button (new Rect (340, 104, 20, 20), "-"))
MatchMaxPlayers -= 1;
}
private void Menu_Lobby()
{
}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class MultiplayerManager : MonoBehaviour
{
public static MultiplayerManager instance;
public string PlayerName;
private string MatchName = "";
private string MatchPassword = "";
private int MatchMaxUsers = 32;
public List<MPPlayer> PlayerList = new List<MPPlayer>();
void start()
{
instance = this;
}
public void StartServer(string servername, string serverpassword, int maxplayers)
{
MatchName = servername;
MatchPassword = serverpassword;
MatchMaxUsers = maxplayers;
Network.InitializeServer (MatchMaxUsers, 2550, false);
Network.InitializeSecurity ();
}
void OnServerInitialized()
{
Server_PlayerJoinRequest ("", Network.player);
}
void OnConnectedToServer()
{
GetComponent<NetworkView>().RPC("Server_PlayerJoinRequest", RPCMode.Server, "", Network.player);
}
void OnPlayerDisconnected(NetworkPlayer id)
{
GetComponent<NetworkView>().RPC("Client_RemovePlayer", RPCMode.All, id);
}
[RPC]
void Server_PlayerJoinRequest(string playername, NetworkPlayer view)
{
GetComponent<NetworkView>().RPC("Client_AddPlayerToList", RPCMode.All, playername, view);
}
[RPC]
void Client_AddPlayerToList(string playername, NetworkPlayer view)
{
MPPlayer tempplayer = new MPPlayer ();
tempplayer.PlayerName = playername;
tempplayer.PlayerNetwork = view;
PlayerList.Add (tempplayer);
}
[RPC]
void Client_RemovePlayer(NetworkPlayer view)
{
MPPlayer temppl = null;
foreach(MPPlayer pl in PlayerList)
{
if(pl.PlayerNetwork == view)
{
temppl = pl;
}
}
if (temppl != null)
{
PlayerList.Remove(temppl);
}
}
}
public class MPPlayer
{
public string PlayerName = "";
public NetworkPlayer PlayerNetwork;
}
I took the time to format your script code for you. Please read the FAQ so you learn how to do this. Now the script is formatted, the lines in the error message make sense.
Answer by Graham-Dunnett · May 14, 2015 at 11:56 AM
The error message:
(at Assets/MyScripts/MenuManager.cs:40)
says that line 40 has the problem. Line 40 is:
MultiplayerManager.instance.PlayerName = GUI.TextField (new Rect (325, 22, 200, 30), MultiplayerManager.instance.PlayerName);
So now you know exactly where the problem is.
Further the error message tells you:
Object reference not set to an instance of an object
Which basically says that a variable you're using isn't set to anything. Your line 40 uses a variable called MultiplayerManager
but I can't see where you set that variable to a value anywhere. Your MenuManager
class doesn't know anything about the MultiplayerManager
class.