Jump to content
Sign in to follow this  
Peter Sword

ANSWERED Duda resoluciones - Canvas Scaler

Recommended Posts

Buenas, gente.

He reparado en que hay un concepto en Unity del cual pensaba que funcionaba de una manera, pero resulta que... no.

Os comento: uso un Canvas principal (que tiene dentro otros canvas) al que le he añadido el componente Canvas Scale configurado de esta forma:

image.png

Yo pensaba que, con esto, mi juego se vería a 1920x1080p y que el resto de pantalla, si es que alguien usa un monitor con una proporción distinta a 16:9, se vería negra.

El caso es que he comprobado que no es así, que llevando el juego al iPad (mi primera versión era para PC/MAC), se descolocan algunas cosas y salen imágenes de la interfaz que yo tengo fuera del 1080p a propósito (y que las animo para que entren en pantalla en determinados momentos).

La cuestión, entonces, es: ¿existe alguna manera de que mi juego, que está diseñado para 1080p, no muestre nada que no esté dentro de esta resolución? Como las pelis, que sacan una franja negra arriba y otra abajo pero que justo en el centro la peli se ve bien. 

Quizá este esquema que pego debajo ayude a comprender mi situación: lo que está fuera de la zona del rectángulo azul, quiero que se vea negro si la pantalla no es de 1080p, y que no renderize los objetos que tengo por ahí ocultos.

image.png

 

 

image.png

Edited by Peter Sword

Share this post


Link to post
Share on other sites

Diría que tendrías que reescalar el background negro a la resolución del dispositivo y no reescalar el panel del 1080p. El background negro sería el último gameobject de la jerarquía  para que se sobreponga sobre todo el resto.

  • Like 1

Share this post


Link to post
Share on other sites

porque el canvas tiene dentro otro canvas?

creo que la escala de um canvas podria afectar al otro...

no seria mejor que el canvas tubiera varios paneles dentro?

puedes ocultar los objetos mas lejos, o puedes activar/desactivar por script su Renderer, Image, o lo que sea...

puedes saber el screen.height y re_escalar el panel (o poner unos paneles o dos "image" negras arriba y abajo)...

hay mil formas de hacerlo

Share this post


Link to post
Share on other sites

@Igor y @iRobb, gracias a ambos por vuestras respuestas.

Respondiendo a la pregunta de "porque el canvas tiene dentro otro canvas?", el tema es que es una práctica recomendada por rendimiento. Cada vez que cambias algo en el canvas, se redibuja entero, lo que consume bastante. En mi caso, hay partes de la interfaz que se redibujan mucho, por lo que uso canvas internos de manera que sólo se tiene que re-renderizar esa zona y no todo el canvas.

 

Volviendo al tema inicial, entiendo vuestros consejos, pero no me queda claro para qué sirve, entonces, el Canvas Scaler, ya que la cámara acaba renderizando todo lo que está fuera de esos 1920x1080p que le he configurado si se da el caso de un monitor no 16:9.

Share this post


Link to post
Share on other sites

El CanvasScaler es un componente que "ajusta" los límites (xMin, xMax, yMin, yMax), no tiene ninguna relación con el proceso de renderizado, si queres que no se renderize lo que está fuera de esos límites podes usar un RectMask2D.

Solo basta utilizar 1 Canvas Scale en el Root, no seguir anidando.

Edited by francoe1

Share this post


Link to post
Share on other sites
1 hour ago, francoe1 said:

El CanvasScaler es un componente que "ajusta" los límites (xMin, xMax, yMin, yMax), no tiene ninguna relación con el proceso de renderizado, si queres que no se renderize lo que está fuera de esos límites podes usar un RectMask2D.

Solo basta utilizar 1 Canvas Scale en el Root, no seguir anidando.

Gracias, @francoe1

 

Entonces, ¿cómo uso el RectMask2D? ¿Directamente se lo acoplo al Canvas? ¿O trabaja sobre la cámara?

Share this post


Link to post
Share on other sites
23 hours ago, Peter Sword said:

Entonces, ¿cómo uso el RectMask2D? ¿Directamente se lo acoplo al Canvas? ¿O trabaja sobre la cámara?

Es un componente que lo añades al Canvas.  por tanto se lo pones en la "raíz" de esa GUI o ese grupo de elementos GUI.

Haces que ocupe toda la pantalla, y así ignorará dibujar todo lo que ocurra fuera de ella. Por ejemplo, transiciones de elementos GUI que se recolocan hasta un lugar seguro, etc...

Share this post


Link to post
Share on other sites
Sign in to follow this  

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