Noticias

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

Duda sobre los Layers en Unity

Iniciado por TheShopKeeper, Agosto 31, 2018, 12:17:58 AM

Tema anterior - Siguiente tema
Agosto 31, 2018, 12:17:58 AM Ultima modificación: Agosto 31, 2018, 12:52:00 PM por pioj
Desde hace un tiempo he tenido unos contratiempos con las capas en Unity que creía que lo había "solucionado" a mi manera, pero ahora me chocó el golpe. Solo uso Unity en 2D.
 
Normalmente para ordenar las capas en Unity uso las propiedades de los Layers gracias al Sprite Render, dependiendo al orden que quiero que se vean les doy el orden y así.
 
https://ibb.co/kYPYtU
 
Pero la situación es la siguiente.
 
Cuando creo algún elemento UI, se crea el Canvas, y estos elementos no toman las propiedades de  los Layers que tiene el Sprite Renderer.
 
https://ibb.co/jzGP09
 
Para ordenar las capas lo que hacía era moverlos en el eje Z con la vista en 3D. Pero esto me ha traído problemas ahora, ya que estoy realizando animaciones, fuegos que se mueven en la pantalla, huesos que caminan y etc, pero tengo problemas a la hora de que se vean bien según su ubicación ya que el Wallpaper que le puse me da conflicto con un "Sprite" de un hueso caminando, intenté jugar con el eje Z para ver si los ubicaba a todos en el orden que quería pero no funcionó. Les cambié de posición en el Hierarchy y tampoco funcionó, por lo cual se me ocurrió ver si existe para los elementos de la UI alguna forma de aplicarle las propiedades de los Layers como a los Sprites.
 
¿Algún consejo que me puedan dar?
 
Revisé en la documentación y lo único así que encontré fue una propiedad llamada GUI Layer, me decía que se lo añadiera a la cámara, pero no encontré su funcionalidad, para lo que estaba buscando.
 
Saludos.
 
 

Cita de: AlterKZero date=1535667478Cuando creo algún elemento UI, se crea el Canvas, y estos elementos no toman las propiedades de  los Layers que tiene el Sprite Renderer.
   


Justamente porque uno es Sprite Renderer y el otro Canvas Renderer, no son lo mismo y los render de cada uno funciona en su mundo, así como el Mesh Renderer también. Recordá que Sprite es un recurso, SpriteRenderer un componente.
 
Cita de: AlterKZero date=1535667478¿Algún consejo que me puedan dar?
   


En líneas generales Sorting Layers NO es lo mismo que Layers, si usas Sprites te vas a dar cuenta que los Z de cada sprite no influyen si ambos tienen una sorting layer diferente, es decir por más que tengas un sprite frente a otro con un z que haga visible pero su sorting layer está por debajo que la del otro sprite este último será visible. Dentro de cada sorting layer funcionan las profundidades con z. En definitiva mi consejo sería que te pases a uno de los dos sistemas o Sprites o Canvas. Yo en sprites nunca uso sorting layers, prefiero usar distintos z's y listo, mi forma. Si usas el sistema de UI (Canvas) la profundidad(o visibilidad) depende de la jerarquía de los hijos del canvas, creo que más abajo = visible, fijate.
 
 
 
Cita de: AlterKZero date=1535667478Revisé en la documentación y lo único así que encontré fue una propiedad llamada GUI Layer, me decía que se lo añadiera a la cámara, pero no encontré su funcionalidad, para lo que estaba buscando.
   


de la doc:
 
When a GUI Layer is attached to a Camera it will render all GUI Textures and GUI Texts in the scene

. GUI Layers do not affect UnityGUI in any way.

 
OSea que si no vas a usar IMGUI (el sistema viejo de UI de Unity) esto no hace nada, creo que las cámaras ya vienen con esto (?) no recuerdo.
 
 

Agosto 31, 2018, 03:38:52 AM #2 Ultima modificación: Agosto 31, 2018, 12:52:21 PM por pioj
Magníficas explicaciones @lightbug
 
Pero según me cuentas dices
 
Cita de: lightbug date=1535670320Si usas el sistema de UI (Canvas) la profundidad(o visibilidad) depende de la jerarquía de los hijos del canvas, creo que más abajo = visible, fijate.
   


Pero en mi caso lo que sucede es esto:
 
https://ibb.co/crEmDU
 
Si puedes observar, el Canvas contiene "buttons- - - - - - -" y "texts- - - - - - -" está por debajo de "Asgore". "Asgore" tiene en su interior un Particle System "Fire" y "Backgroundasgore" que es el cuadrado violeta.
 
Mi objetivo es que los "Textos" se vea por encima del cuadrado violeta o sea el "Backgroundasgore", sin embargo, aunque lo añada arriba o abajo no cambia la forma de visibilidad. Todos los elementos dentro del canvas tienen Position Z = 0 y el "Backgroundasgore" tiene una animación que se mueve en el eje Z = 0 (no se si esto afectará en algo).
 
Una cosa curiosa es que cuando desactivo "Wallpaper" (que es el fondo de atrás), entonces si se cumple el objetivo y los "Textos" se ven por encima del cuadrado violeta:
 
https://ibb.co/bvu8Sp
 
Gracias siempre por tan rápida respuesta.
 
 

y "Backgroundasgore"  tiene un componente image, o tiene un spriteRenderer? la verdad no se bien que será pero seguí la línea de arriba, trata de identificar los distintos "mundos" y como cada uno se maneja, lo que resta es ordenarlos. Por ej ahí tenes un particle system, no esperés que eso interactúe con el canvas. Si queres profundizar el tema del canvas investigá los modos de renderizado quizas te ayuden más con el tema del orden.
 
 

Cita de: lightbug date=1535774082y "Backgroundasgore"  tiene un componente image, o tiene un spriteRenderer? la verdad no se bien que será pero seguí la línea de arriba, trata de identificar los distintos "mundos" y como cada uno se maneja, lo que resta es ordenarlos. Por ej ahí tenes un particle system, no esperés que eso interactúe con el canvas. Si queres profundizar el tema del canvas investigá los modos de renderizado quizas te ayuden más con el tema del orden.
   
   
       
   


Muchas gracias por dedicarme un poco de tu tiempo. Al final di con la solución, he notado que debo estudiar mejor la documentación del Unity. El problema que tenía consistía que había añadido la imagen directamente lo cual salió con "Sprite Render" y luego fue que le añadí las propiedades del UI, quedando entonces como Image y Sprite Render, eso era lo que no me permitía trabajar correctamente. Una vez más, muy agradecido por dedicarme un momento de su tiempo @lightbug Saludos.

Etiquetas: