Noticias

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

Problema al instanciar elementos del GUI

Iniciado por rogerdv, Septiembre 14, 2015, 09:49:48 PM

Tema anterior - Siguiente tema
Estoy tratando de implementar algunso elementos del GUI que deben ser reutilizados en diferentes escenas, como la ventana del inventario, los diálogos, etc. Para ello, creo el correspondiente prefab, y confirmo que funcione agregándolo desde el editor en una escena de prueba. Sin embargo, cuando intento instanciar el prefab desde el código siguiente:
var dlgWindow = Instantiate(dlgPrefab);
var canvas = GameObject.Find("Canvas");
var rt = dlgWindow.GetComponent<RectTransform>();
rt.SetParent(canvas.GetComponent<RectTransform>());
En vez de colocarse donde debe, cae en la esquina inferior izquierda y reducido a un mínimo de su tamaño, de forma que no se ve. Cómo puedo manejar esto correctamente?

http://dsgp.blogspot.com">Divagaciones sobre programación y juegos



Colgarlos del canvas para buscarlo siempre me ha salido mal, ya que hasta puedes tener más de un canvas.Yo te recomiendo que crees un gameobject vacío en el canvas que te interese y te quedes con la referencia de éste. Directamente allí los hijos.

Me han recomendado la siguiente solución que funciona:
var dlgWindow = Instantiate(dlgPrefab);
var canvas = GameObject.Find("Canvas");
dlgWindow.transform.SetParent(canvas.transform, false);
TEnndré que probar lo del gameobject vacío también, para el caso de las múltiples canvas. 

http://dsgp.blogspot.com">Divagaciones sobre programación y juegos



Los TAGs están para algo, aprovéchalos...También existen otros trucos, cómo por ejemplo crear un script "dummy" o vacío que no haga nada, pero que tenga un nombre de clase concreto y asignarlo al GameObject que quieres encontrar. Luego, durante la búsqueda del GameObject, busca realmente por GetComponent ó GetComponentInChildren.Como sólo ese gameobject puede tener asignado el componente "dummy", no habrá pérdida y lo encontrará fácilmente...

Etiquetas: