Well, i’m pretty sure this is a common problem caused for insufficient knowledge, i tried veryfing other questions and threads but i don’t get them at all because they all have always something more specific as, for example, making a button dissapear or showing again depending on a certain state and some other things like that, but my problem is more simple i think.
I’m trying to learn networking since i want to make my game multiplayer, and, like in survivors, have a dialog to start the game as the server and another dialog to connect to another server, in which i want to have a Text Field to write the IP Address into. I managed to get my preferred layout look, but, i can’t type anything into the TextField, i read in other questions that i must make sure i’m not calling the content inside the textfield from any other function, so i only called it from function Start() to set it to a default value (“192.168.1.100”, only to test the connection, because this is my private IP at the moment), and i also tried to delete this call from Start() so it wouldn’t got changed never, but Unity says:
NullReferenceException: Object reference not set to an instance of an object
UnityEngine.TextEditor.ClampPos () (at C:/BuildAgent/work/7535de4ca26c26ac/Runtime/Export/TextEditor.cs:1185)
UnityEngine.GUI.DoTextField (Rect position, Int32 id, UnityEngine.GUIContent content, Boolean multiline, Int32 maxLength, UnityEngine.GUIStyle style) (at C:/BuildAgent/work/7535de4ca26c26ac/Runtime/ExportGenerated/Editor/GUI.cs:496)
UnityEngine.GUILayout.DoTextField (System.String text, Int32 maxLength, Boolean multiline, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) (at C:/BuildAgent/work/7535de4ca26c26ac/Runtime/ExportGenerated/Editor/GUILayout.cs:96)
UnityEngine.GUILayout.TextField (System.String text, UnityEngine.GUILayoutOption[] options) (at C:/BuildAgent/work/7535de4ca26c26ac/Runtime/ExportGenerated/Editor/GUILayout.cs:57)
Menu Principal.OnGUI () (at Assets/Mis Scripts/Menu Principal.js:225)
That would mean that anytime i want to use a TextField, i can’t leave it ‘empty’, isn’t it?
I’ll leave to you the hole code of my Main Menu (some parts are in Spanish, sorry about that):
#pragma strict
private var mostrarMenuPrincipal : boolean = true;
private var mostrarOpciones : boolean = false;
private var mostrarBotonOpciones : boolean = true;
private var mostrarBotonVolverMenuPrincipal : boolean = false;
private var mostrarMenuUnJugador : boolean = false;
private var mostrarBotonCancelar : boolean = false;
private var mostrarMenuMultijugador : boolean = false;
private var mostrarMenuModo1Multijugador : boolean = false;
private var mostrarDialogoServer : boolean = false;
private var mostrarDialogoHuesped : boolean = false;
private var InputCustomIP : String;
private var toggleDificultad1 : boolean = false;
private var toggleDificultad2 : boolean = false;
private var toggleDificultad3 : boolean = false;
var supportedNetworkLevels : String[] = [ "mylevel" ];
var disconnectedLevel : String = "loader";
private var lastLevelPrefix = 0;
//private var estadoActualPantalla : boolean;
enum NetworkConnectionError
{
TooManyConnectedPlayers,
}
function Start()
{
mostrarMenuPrincipal = true;
Time.timeScale = 1;
InputCustomIP = "192.168.1.100";
}
function Awake ()
{
// Network level loading is done in a separate channel.
networkView.group = 1;
}
function Update()
{
}
function OnGUI ()
{
//MENU PRINCIPAL
if(mostrarMenuPrincipal)
{
// Make a background box
GUI.Box (Rect ((Screen.width * 0.5)-75,(Screen.height * 0.5)-75,170,134), "Menu Principal");
// Make the first button. If it is pressed, Application.Loadlevel (1) will be executed
if (GUI.Button (Rect ((Screen.width * 0.5)-65,(Screen.height * 0.5)-50,150,23), "Un Jugador"))
{
mostrarMenuPrincipal = false;
mostrarMenuUnJugador = true;
mostrarBotonCancelar = true;
mostrarBotonOpciones = false;
}
if (GUI.Button (Rect ((Screen.width * 0.5)-65,(Screen.height * 0.5)-25,150,23), "MultiJugador"))
{
mostrarMenuPrincipal = false;
mostrarMenuUnJugador = false;
mostrarBotonCancelar = true;
mostrarBotonOpciones = false;
mostrarMenuModo1Multijugador = true;
mostrarBotonVolverMenuPrincipal = true;
Application.runInBackground = true;
}
if (GUI.Button (Rect ((Screen.width * 0.5)-65,(Screen.height * 0.5)+25,150,23), "Salir"))
{
Application.Quit();
}
}
//MENU PARTIDA
if(mostrarMenuUnJugador)
{
//GUI.Box (Rect (50,50,(Screen.width -100),(Screen.height -150)), "Ajustes Partida");
GUILayout.BeginArea(Rect ((Screen.width * 0.5)-225,(Screen.height * 0.5)-75,450,130));
GUI.Box (Rect (0,0,450,125), "Ajustes Partida");
GUILayout.BeginArea(Rect (5,20,440,200));
//GUILayout.Box("Nota: Por ahora..., estos controles de dificultad son solo de relleno.");
/*GUILayout.BeginHorizontal();
GUILayout.Label("Nivel de Dificultad");
if(GUILayout.Button("Facil"))
{
}
if(GUILayout.Button("Normal"))
{
}
if(GUILayout.Button("Hardcore"))
{
}
GUILayout.EndHorizontal();*/
if(GUILayout.Button("Iniciar Nueva Partida"))
{
Screen.showCursor = false;
Application.LoadLevel(3);
}
//GUILayout.Button("Cargar partida guardada(No funciona de momento)");
GUILayout.EndArea();
GUILayout.EndArea();
if(GUI.Button(Rect((Screen.width * 0.5)-75,(Screen.height * 0.5)+(Screen.height * 0.27),160,20), "Cancelar"))
{
mostrarMenuPrincipal = true;
mostrarMenuUnJugador = false;
mostrarBotonOpciones = true;
}
}
//MENU MULTIJUGADOR - PARTE 1
if(mostrarMenuModo1Multijugador)
{
GUI.Box(Rect ((Screen.width * 0.5)-160,(Screen.height * 0.5)-37,150,75),"Tipo de conexión");
GUILayout.BeginArea(Rect ((Screen.width * 0.5)-155,(Screen.height * 0.5)-14,140,50));
GUILayout.BeginVertical();
if(GUILayout.Button("Anfitrión"))
{
mostrarDialogoServer = true;
mostrarDialogoHuesped = false;
}
if(GUILayout.Button("Huésped"))
{
mostrarDialogoHuesped = true;
mostrarDialogoServer = false;
}
GUILayout.EndVertical();
GUILayout.EndArea();
}
//DIALOGO DEL MODO ANFITRION
if(mostrarDialogoServer)
{
GUI.Box(Rect ((Screen.width * 0.5)+10,(Screen.height * 0.5)-50,180,100),"Ajustes del Server");
GUILayout.BeginArea(Rect ((Screen.width * 0.5)+15,(Screen.height * 0.5)-29,170,90));
GUILayout.BeginVertical();
var JugadoresConectados : int = Network.connections.Length;
var BotonIniciarServer : boolean = true;
var BotonDetenerServer : boolean = false;
/*if(BotonIniciarServer)
{*/
if(GUILayout.Button("Iniciar Server"))
{
ArrancarServerInterno();
/*BotonIniciarServer = false;
BotonDetenerServer = true;*/
}
/* } */
/*if(BotonDetenerServer)
{
if(GUILayout.Button("Parar Server"))
{
Network.Disconnect(200);
MasterServer.UnregisterHost();
BotonIniciarServer = true;
BotonDetenerServer = false;
Debug.Log("SERVER CERRADO");
}
}*/
GUILayout.Box("Jugadores conectados: " +JugadoresConectados);
for (var level in supportedNetworkLevels)
{
if(GUILayout.Button("Empezar Partida"))
{
Screen.showCursor = false;
//Application.LoadLevel(2);
networkView.RPC( "LoadLevel", RPCMode.AllBuffered, level, lastLevelPrefix + 1);
}
}
GUILayout.EndVertical();
GUILayout.EndArea();
}
//DIALOGO DEL MODO HUESPED
if(mostrarDialogoHuesped)
{
GUI.Box(Rect ((Screen.width * 0.5)+10,(Screen.height * 0.5)-50,180,100),"Ingresa la IP del Server");
GUILayout.BeginArea(Rect ((Screen.width * 0.5)+15,(Screen.height * 0.5)-29,170,90));
GUILayout.BeginVertical();
//GUILayout.Label("Ingresa la IP del Server:");
GUILayout.TextField(InputCustomIP);
GUILayout.Box("Jugadores conectados: " +JugadoresConectados);
if(GUILayout.Button("Conectarse"))
{
Network.Connect(InputCustomIP,25000);
Screen.showCursor = false;
}
/*if(GUILayout.Button("Unirse a la partida"))
{
Screen.showCursor = false;
Application.LoadLevel(2);
}*/
GUILayout.EndVertical();
GUILayout.EndArea();
}
//OPCIONES DE JUEGO
if(mostrarOpciones)
{
//Area de fondo
//GUI.Box (Rect (5,5,(Screen.width -10),(Screen.height -10)), "Opciones");
GUI.Box (Rect ((Screen.width * 0.5)-280,(Screen.height * 0.5)-110,560,220), "Opciones");
//AREA PRINCIPAL DE OPCIONES
GUILayout.BeginArea(Rect ((Screen.width * 0.5)-275,(Screen.height * 0.5)-110,550,250));
//Comienzo de la seccion izquierda
GUILayout.BeginHorizontal();
GUILayout.BeginArea(Rect (0,30,300,200));
//CAMBIAR CALIDAD
GUILayout.BeginArea(Rect (0,0,295,40));
GUILayout.BeginHorizontal();
if (GUILayout.Button("-"))
{
QualitySettings.DecreaseLevel();
}
GUILayout.Box("Nivel de Calidad: "+ (QualitySettings.names[QualitySettings.GetQualityLevel()]));
if (GUILayout.Button("+"))
{
QualitySettings.IncreaseLevel();
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//CAMBIAR RESOLUCION
GUILayout.BeginArea(Rect (0,50,295,175));
GUILayout.Label("Resolución");
GUILayout.BeginHorizontal();
if(GUILayout.Button("640x480"))
{
Screen.SetResolution(640,480,true);
}
if(GUILayout.Button("800x600"))
{
Screen.SetResolution(800,600,true);
}
if(GUILayout.Button("1024x768"))
{
Screen.SetResolution(1024,768,true);
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
if(GUILayout.Button("1280x720"))
{
Screen.SetResolution(1280,720,true);
}
if(GUILayout.Button("1400x900"))
{
Screen.SetResolution(1400,700,true);
}
if(GUILayout.Button("1600x900"))
{
Screen.SetResolution(1600,900,true);
}
if(GUILayout.Button("1920x1080"))
{
Screen.SetResolution(1920,1080,true);
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
GUILayout.BeginArea(Rect (0,130,295,175));
GUILayout.BeginHorizontal();
if(GUILayout.Button("Cambiar a modo Ventana/Pantalla Completa"))
{
Screen.fullScreen = !Screen.fullScreen;
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//CONTROL VOLUMEN
GUILayout.BeginArea(Rect (0,30,295,40));
GUILayout.BeginHorizontal();
GUILayout.Label("Nivel de Volumen");
GUILayout.BeginArea(Rect (110,5,180,35));
AudioListener.volume = GUILayout.HorizontalSlider (AudioListener.volume, 0.0, 1.0);
GUILayout.EndArea();
GUILayout.EndHorizontal();
GUILayout.EndArea();
//ACTIVAR TORMENTA NIEVE
/*GUILayout.BeginArea(Rect (0,125,295,40));
GUILayout.BeginHorizontal();
GUILayout.Label("Tormenta de nieve densa: ");
if (GUILayout.Button("Activar"))
{
NevDensa.SetActive(true);
}
if (GUILayout.Button("Desactivar"))
{
NevDensa.SetActive(false);
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//ACTIVAR COPOS DE NIEVE
GUILayout.BeginArea(Rect (0,150,295,40));
GUILayout.BeginHorizontal();
GUILayout.Label("Copos de Nieve: ");
if (GUILayout.Button("Activar"))
{
CoposNieve.SetActive(true);
}
if (GUILayout.Button("Desactivar"))
{
CoposNieve.SetActive(false);
}
GUILayout.EndHorizontal();
GUILayout.EndArea();*/
GUILayout.EndArea();
GUILayout.EndHorizontal();//Fin de la seccion izquierda
//Comienzo de la seccion derecha
GUILayout.BeginHorizontal();
GUILayout.BeginArea(Rect (305,50,300,200));
//MOTION BLUR
GUILayout.BeginArea(Rect (0,0,245,25));
GUILayout.BeginHorizontal();
GUILayout.Label("Desenfoque movimiento: ");
if (GUILayout.Button("Act."))
{
Camera.main.GetComponent(CameraMotionBlur).enabled = true;
}
if (GUILayout.Button("Desact."))
{
Camera.main.GetComponent(CameraMotionBlur).enabled = false;
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//ANTIALIAS
GUILayout.BeginArea(Rect (0,30,245,25));
GUILayout.BeginHorizontal();
GUILayout.Label("Antialias: ");
if (GUILayout.Button("Activar"))
{
Camera.main.GetComponent(AntialiasingAsPostEffect).enabled = true;
}
if (GUILayout.Button("Desactivar"))
{
Camera.main.GetComponent(AntialiasingAsPostEffect).enabled = false;
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//SSAO
GUILayout.BeginArea(Rect (0,60,245,25));
GUILayout.BeginHorizontal();
GUILayout.Label("SSAO: ");
if (GUILayout.Button("Activar"))
{
Camera.main.GetComponent(SSAOEffect).enabled = true;
}
if (GUILayout.Button("Desactivar"))
{
Camera.main.GetComponent(SSAOEffect).enabled = false;
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
//VSync
GUILayout.BeginArea(Rect (0,90,245,25));
GUILayout.BeginHorizontal();
GUILayout.Label("Nivel VSync: ");
if (GUILayout.Button("0 (Desact.)"))
{
QualitySettings.vSyncCount = 0;
}
if (GUILayout.Button("1"))
{
QualitySettings.vSyncCount = 1;
}
if (GUILayout.Button("2"))
{
QualitySettings.vSyncCount = 2;
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
GUILayout.EndArea();
GUILayout.EndHorizontal();//Fin de la seccion derecha
GUILayout.EndArea();
}
//BOTON "Volver al Menu Principal"
if(mostrarBotonVolverMenuPrincipal)
{
if(GUI.Button(Rect((Screen.width * 0.5)-75,(Screen.height * 0.5)+(Screen.height * 0.27),160,20), "Volver al Menu Principal"))
{
mostrarMenuPrincipal = true;
mostrarOpciones = false;
mostrarBotonVolverMenuPrincipal = false;
mostrarBotonOpciones = true;
mostrarMenuModo1Multijugador = false;
mostrarDialogoServer = false;
mostrarDialogoHuesped = false;
Application.runInBackground = false;
}
}
//BOTON "Opciones"
if(mostrarBotonOpciones)
{
if(GUI.Button(Rect((Screen.width * 0.5)-65,(Screen.height * 0.5),150,23), "Opciones"))
{
mostrarMenuPrincipal = false;
mostrarOpciones = true;
mostrarBotonOpciones = false;
mostrarBotonVolverMenuPrincipal = true;
}
}
}
function ArrancarServerInterno()
{
var useNat = !Network.HavePublicAddress();
Network.InitializeServer(4,25000,useNat);
//MasterServer.RegisterHost("Sombras del Yeut", "Modo de Prueba", "Actualmente este es solo un test");
yield WaitForSeconds(1);
}
function OnServerInitialized()
{
Debug.Log("SERVER INICIADO");
}
/*function OnMasterServerEvent(mse:MasterServerEvent)
{
if( mse == MasterServerEvent.RegistrationSucceeded)
{
Debug.Log("Server Registrado Correctamente");
}
}
function OnConnectedToServer()
{
}*/
Hope it’s simple to fix, thanks in advance!