Jump to content

Recommended Posts

Hola nuevamente.

Otra vez atrancado en algo que será una chorrada pero tras un par de días de pelearme con ello, mirar en la ayuda de Unity y el foro, diría que lo estoy haciendo calcado, pero no, hay algo que no me va. Trato de instanciar un prefab, y lo curioso es que me lo genera, así que mal, mal, no lo estoy haciendo, pero algo no "rula". Me explico, al crearlo quiero tener una referencia al objeto instanciado para poder lógicamente modificar sus propiedades. Pero no hay manera. No es mucho problema, podría buscar por tipo, o añadirle un tag, imagino que funcionaría, pero la primera cuestión es que parece más evidente obtener esta referencia en el momento de la creación, es más limpio y consume menos recursos. Segundo, por qué si no lo estoy consiguiendo, es que algún concepto no he entendido bien, y eso puede ser un problema importante más adelante, así que si alguien puede darme una idea de qué estoy haciendo y/o entendiendo mal, estaría muy agradecido.

Empiezo creando la referencia a un GameObject en la declaración de la clase:

Cita

 

public GameObject Planeta1GO;

//Y procedo a la instanciación del prefab.

Planeta1GO = Instantiate(PrefabPlaneta, transform.position, transform.rotation) as GameObject;

 

Me crea el objeto sin problema, lo veo en el juego, en el inspector e incluso puedo manipularlo manualmente desde la pantalla de diseño. Sin embargo Planeta1GO me aparece siempre como NONE (GameObject), vamos el Null de toda la vida. He probado a crear el objeto en la misma línea de la instanciación como he visto en muchos ejemplos:

Cita

 

GameObject Planeta1GO = Instantiate(PrefabPlaneta, transform.position, transform.rotation) as GameObject;

//También tratando de hacer un cast

GameObject Planeta1GO = (GameObject) Instantiate(PrefabPlaneta, transform.position, transform.rotation);

 

Y todas las combinaciones que se me han ocurrido.

Como siempre muchas gracias a todos.

 

Share this post


Link to post
Share on other sites

Has probado a crear el objeto y luego asignarlo a la variable?

public GameObject planet1GO;

private void Start () {
	var planet = Instantiate(planetPrefab, transform.position, transform.rotation);
  	planet1GO = planet;
}

 

Edited by Jose134

Share this post


Link to post
Share on other sites

Hola, gracias por las respuestas.

Este finde he tenido tiempo y he estado haciendo pruebas, y me he dado cuenta de que el prefab me lo estaba cogiendo como un transform, no me preguntes el por qué, el caso es que he rehecho de cero el transform y he rehecho la referencia también, y así a la primera, así que en algo habría metido la pata.

Nuevamente, gracias a todos.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...