Jump to content
Unity Insider Forum

c# Fehlermeldung


enter9991

Recommended Posts

Hallo ich bin momentan dabei ein multiplayer script zu schreiben

und muss dazu sagen das ich c# noch nicht so gut kann aber etwas ;)

 

ich bekomme diese fehlermeldung hier ( ich hoffe das kommt nicht davon das ich mit virtualbasic schreibe )

 

NullReferenceException: Object reference not set to an instance of an object

MenuManager.Menu_Main () (at Assets/Scripts/MenuManager.cs:42)

MenuManager.OnGUI () (at Assets/Scripts/MenuManager.cs:22)

 

Meine 2 c# Codes (MenuManager & MultiplayerManager)

 

MenuManager

 

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(400, 10, 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, 10, 130, 30), "Match Name");
	MatchName = GUI.TextField(new Rect(400, 10, 200, 30), MatchName);
	GUI.Label(new Rect(220, 50, 130, 30), "Match Password");
	MatchPassword = GUI.PasswordField(new Rect(400, 50, 200, 30),MatchPassword,'*');
	GUI.Label(new Rect(220, 90, 130, 30), "Match May Players ");
	GUI.Label(new Rect(400, 90, 200, 30), MatchMaxPlayers.ToString());
	MatchMaxPlayers = Mathf.Clamp(MatchMaxPlayers, 8, 32);
	if (GUI.Button(new Rect(425, 90, 25, 30), "+"))
		MatchMaxPlayers += 2;
	if (GUI.Button(new Rect(450, 90, 25, 30), "-"))
		MatchMaxPlayers -= 2;
}

private void Menu_Lobby()
{
}
}

 

 

 

 

MultiplayerManager

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 maxusers )
{
	MatchName = servername;
	MatchPassword = serverpassword;
	MatchMaxUsers = maxusers;
	Network.InitializeServer(MatchMaxUsers, 2550, false);
	Network.InitializeSecurity();
}
void OnServerInitialized()
{
	Server_PlayerJoinRequest("",Network.player);
}
void OnConnectedToServer()
{
	networkView.RPC("Server_PlayerJoinRequest", RPCMode.Server, "", 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 tempp1 = null;
	foreach(MPPlayer pl in PlayerList)
	{
		if(pl.PlayerNetwork == view)
		{
			tempp1 = pl;
		}
	}
	if(tempp1 != null)
	{
		PlayerList.Remove(tempp1);
	}

}
}

public class MPPlayer
{
public string PlayerName = "";
public NetworkPlayer PlayerNetwork;
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aus dem kompletten Code werde ich jetzt auf anhieb nicht schlau, aber die Fehlermeldung sagt einfach nur aus, dass in Zeile 42 und 22 des MenuManager Scripts eine "NullReferenceException" vorliegt. Also dass du mit objekten Arbeitest, die eigentlich noch gar nicht Instanziert wurden, im Inspector nicht zugewiesen sind oder einfach gar nicht Existieren.

 

Schau mal ob wirklich alles in den Zeilen genau definiert wurde, bevor du damit was anstellst ;) wenn aber alles richtig ist, dann mach einfach eine If-Abfrage in der du abfragst ob dein Objekt null ist ^^, damit es erst dann damit etwas passieren kann, wenn dein Objekt eben NICHT null ist ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...