- Home /
Whats wrong with this mutiplayer script
hey i am following the tutorial but i am facing a problem here , the problem is
NullReferenceException: Object reference not set to an instance of an object MainManager.Menu_Main () (at Assets/Scripts/MainManager.cs:47) MainManager.OnGUI () (at Assets/Scripts/MainManager.cs:23)
my both script are
using UnityEngine; using System.Collections;
public class MainManager : MonoBehaviour {
public string CurrentMenu; public string MatchName; public string MatchPassword; public int MatchMaxPlayers = 32 ;
private Vector2 ScrollLobby = Vector2.zero ;
void Start() { CurrentMenu = "Main"; MatchName = "match name" + Random.Range(0,5000); }
void OnGUI() { if(CurrentMenu == "Main") Menu_Main(); if(CurrentMenu == "Lobby") Menu_Lobby(); if(CurrentMenu == "Host") Menu_HostGame();
}
public void NavigateTo(string nextmenu) { CurrentMenu = nextmenu; //stores the value of current menue
}
private void Menu_Main() { if(GUI.Button(new Rect(10, 20, 200, 50),"Host game")) { NavigateTo("Host"); } if(GUI.Button(new Rect(10, 70, 200, 50),"Refresh")) { MasterServer.RequestHostList("DeathMatch");
}
MultiplayerManager.instance.PlayerName = GUI.TextField(new Rect(300, 20, 150, 50),MultiplayerManager.instance.PlayerName);
GUI.Label(new Rect(220, 20, 150, 50),"Player Name");
if(GUI.Button(new Rect(460, 10, 100, 30),"Save Name"))
{
PlayerPrefs.SetString("PlayerName",MultiplayerManager.instance.PlayerName);
}
GUILayout.BeginArea(new Rect(Screen.width - 400 ,0,400, Screen.height),"Server List","Box");
foreach(HostData match in MasterServer.PollHostList())
{
GUILayout.BeginHorizontal("BOX");
GUILayout.Label(match.gameName);
if(GUILayout.Button ("Connect"))
{
Network.Connect(match);
}
GUILayout.EndHorizontal();
}
GUILayout.EndArea();
}
private void Menu_HostGame() { if(GUI.Button(new Rect(10, 20, 200, 50),"Back")) { NavigateTo("Main"); }
if(GUI.Button(new Rect(10, 70, 200, 50),"Start Server")) { MultiplayerManager.instance.StartServer(MatchName, MatchPassword,MatchMaxPlayers);
} GUI.Label(new Rect(220,10,130,30),"Match Name"); MatchName = GUI.TextField(new Rect(400,10,200,30),MatchName);
GUI.Label(new Rect(220,40,130,30),"Match Password");
MatchPassword = GUI.PasswordField(new Rect(400,40,200,30),MatchPassword,'*');
GUI.Label(new Rect(220,70,130,30),"Match Max Players");
GUI.Label(new Rect(400,70,200,30),MatchMaxPlayers.ToString());
MatchMaxPlayers = Mathf.Clamp(MatchMaxPlayers ,8,32);
if(GUI.Button(new Rect(425,70,25,30),"+"))
MatchMaxPlayers +=2;
if(GUI.Button (new Rect(450,70,25,30),"-"))
MatchMaxPlayers -=2;
}
private void Menu_Lobby() { ScrollLobby = GUILayout.BeginScrollView(ScrollLobby,GUILayout.MaxWidth(200));
foreach(MPPlayer pl in MultiplayerManager.instance.PlayerList)
{
GUILayout.Box(pl.PlayerName);
}
GUILayout.EndScrollView();
}
void OnServerInitialized() { NavigateTo("Lobby"); }
void OnConnectedToServer() { NavigateTo("Lobby"); }
}
and 2nd script MultiplayerManager
using UnityEngine; using System.Collections; using System.Collections.Generic; public class MultiplayerManager : MonoBehaviour {
public static MultiplayerManager instance ;
private string MatchName = " ";
private string MatchPassword = " ";
private int MatchMaxUsers = 32;
public string PlayerName = "Ali" ;
public List< MPPlayer> PlayerList = new List();
void start()
{
instance = this;
PlayerName = PlayerPrefs.GetString ("PlayerName");
}
public void StartServer(string servername , string serverpassword, int maxusers)
{
MatchName = servername;
MatchPassword = serverpassword;
MatchMaxUsers = maxusers;
Network.InitializeServer(MatchMaxUsers,2550,false);
MasterServer.RegisterHost("Death Match",MatchName,"");
//Network.InitializeSecurity();
}
void OnServerInitialized()
{
Server_PlayerJoinRequest(PlayerName,Network.player);
}
void OnConnectedToServer()
{
networkView.RPC("Server_PlayerJoinRequest",RPCMode.Server,PlayerName,Network.player);
}
void OnPlayerDisconnected(NetworkPlayer id)
{
networkView.RPC("Client_RemovePlayer",RPCMode.All, id);
}
[RPC]
void Server_PlayerJoinRequest(string playername, NetworkPlayer view)
{
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; }
Answer by MarkFinn · Dec 26, 2012 at 06:38 AM
The Start() method in MultiplayerManager is incorrectly named start() (Lower case S) so the instance value is never set.
Your answer
Follow this Question
Related Questions
Making a fps online game 3 Answers
Photon enable/ disable object 2 Answers
multiplayer how to play? and more 1 Answer
Remove first element of array 1 Answer