Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Error de Programacion

Iniciado por Jose, Agosto 12, 2015, 09:43:45 PM

Tema anterior - Siguiente tema
Agosto 12, 2015, 09:43:45 PM Ultima modificación: Junio 01, 2016, 12:54:08 AM por pioj
Hola que tal? mi nombre es Jose, soy nuevo en este mundillo de Unity, empeze a conocer la plataforma y ahora estoy viendo programacion, mi idea es empezar bien de 0 todo, antes de ponerme a hacer algunos proyectos en mente :).
 
Estoy siguiendo un libro de programacion en C# para Unity se llama Learning C# by developing games with Unity 3D: (el libro me ha encantado sobre todo en la forma de separar los estado del juego)mi problema es el siguiente he llegado a una parte que no entiendo bien por que me tira error...
 

using UnityEngine;
using Assets.Interfaces;
using System.Collections;
namespace Assets.States
{
    public class SetupState : IStateBase
    {
        private StateManager manager;
        private GameObject player;
        private PlayerControl controller;
        public SetupState (StateManager managerRef)
        {
            manager = managerRef;
            player = GameObject.Find("Jugador");
            //Debug.Log (player);
            controller = player.GetComponent<PlayerControl>();
            if (Application.loadedLevelName != "Scene1") 
            {
                Application.LoadLevel ("Scene1");
            }
        }
        public void StateUpdate()
        {
            if(Input.GetKeyUp(KeyCode.DownArrow))
               {
                Debug.Log ("Estamos dentro del If de rotacion");
               controller.transform.Rotate(, controller.setupSpinSpeed * Time.deltaTime, );
            }
        }
        public void ShowIt()
               {
            }
    }
}

 
 
 
ese es el codigo de la clase que me tira error:
 



   
      NullReferenceException: Object reference not set to an instance of an object
      Assets.States.SetupState..ctor (.StateManager managerRef) (at Assets/States/SetupState.cs:18)
      Assets.States.BeginState.Switch () (at Assets/States/BeginState.cs:42)
      Assets.States.BeginState.ShowIt () (at Assets/States/BeginState.cs:31)
      StateManager.OnGUI () (at Assets/Scripts/StateManager.cs:45)
   

[/quote]
 
Ese es el error que me tira, tratando de analizar que pasa, hasta donde llegue a entender en la variable player me esta guardando un null, pero no entiendo por que...Si necesitan que suba el codigo de alguna otra clase avisen, pero me parece que esta aca el problema.
 
Agradesco cualquier ayuda, seguire intentando descubrir que es lo que esta pasando saludos y Gracias.

Agosto 12, 2015, 10:54:07 PM #1 Ultima modificación: Junio 01, 2016, 12:52:49 AM por pioj
O esto devuelve null porque no encuentra Jugador:
 



   
      player = GameObject.Find("Jugador");
   

[/quote]
 
o player no tiene un componente llamado PlayerControl.

Y en teoria no encuentra el jugador supongo por que me devuelve null si imprimo en pantalla la variable player, pero la Scena esta bien supongo:estoy desde ayer probando de todo no logro solucionarlo :(.

Pásame la escena y te lo miro.

Agosto 13, 2015, 06:26:28 PM #4 Ultima modificación: Agosto 13, 2015, 06:29:29 PM por Jose
Bueno gracias por la respuesta, mira te comento que descubri algo, busco el objeto dentro del StateUpdate() en vez cuando instancio la clase me lo encuentra pero como a la segunda o tercera ves:
public void StateUpdate()
   {
      player = GameObject.Find("Jugador");
      Debug.Log (player);
      if (player != null) {
         controller = player.GetComponent<PlayerControl> ();
      }
      Debug.Log (controller);
      }
osea tiene que pasar dos o tres frame para que me reconozca el objeto, ahora bien por que tarda tanto, es raro no?, que no lo pueda reconocer cuando llamo al constructor. pensaba en ponerlo en un while dentro del constructor osea que espere a que tome el objeto.... alguien sabe por que tarda tanto? cuando cargo la escena no deberia de cargarse todos los objetos en memoria inmediatamente?, saludoste subo en un archivo zip?.  

Bueno yo te digo por experiencia que en clases que cuelgan de la principal no utilizo ni start ni awake. Creo una función init que llamo desde la principal desde start. Justamente para forzar la carga de componentes.

Hola iRobb gracias por las respuestas, te comento que yo lo que estoy haciendo es seguir el libro ese que estoy estudiando he empezado hace un mes recién en este mundo de Unity, no tengo nada de idea todavía, trato de ir entendiendo lo que voy viendo, ahí te subo lo que estoy siguiendo, para que veas como controlo los estados, no entendi mucho eso que me pusiste arriba supongo q es como controlo yo por ejemplo, en el libro usa la funcion Update la delega a la funciones StateUpdate de cada clase, supongo que me decis hacer algo asi con init y start, perdon por la ignorancia jeje . Saludos
http://unityspain.com/applications/core/interface/file/attachment.php?id=8306">TeoriaC#.rar

Si estas empezando es mejor que no te maree con tanto. Sigue el libro y ve avanzando. De cara a iniciar componentes la funcion awake te sirve y las variables internas luego en el start.

Etiquetas: