enter9991 Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 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 More sharing options...
Siebenkeim Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 MultiplayerManager.instance.PlayerName = GUI.TextField(new Rect(400, 10, 200, 30), MultiplayerManager.instance.PlayerName) Glaube hier happert es irgendwo, eine NullReferenceException bedeutet das ein Objekt den Wert "null" hat (also nichts, keine Instanz) und du trotzdzem versuchst zuzugreifen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 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 More sharing options...
enter9991 Geschrieben 22. August 2014 Autor Melden Share Geschrieben 22. August 2014 Das Steht Im MultiplayerManager void start() { instance = this; } hab ich das damit nicht gemacht ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Siebenkeim Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 Du hast damit der instance Variable nur die jetzige Instanz zugewiesen, nun stellt sich die Frage hast du das Script auch einem GameObject zugewiesen? Und heißt es nicht "Start" statt "start"? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
enter9991 Geschrieben 22. August 2014 Autor Melden Share Geschrieben 22. August 2014 Danke das war der fehler xD ich sollte für heute echt pause machen xD Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 22. August 2014 Melden Share Geschrieben 22. August 2014 Das Problem liegt eher daran, dass du Start kleingeschrieben hast denke ich ^^ //Edit: zu spät Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
enter9991 Geschrieben 22. August 2014 Autor Melden Share Geschrieben 22. August 2014 genau das war der fehler perfekt dann kann ich erst mal weiter machen ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.