Jump to content
UnitySpain
Ben

mal rendimiento en canvas "world" render mode

Recommended Posts

Hola a todos. Estoy teniendo un problema realmente raro (o no, llevo trasteando unity solo un mes) que no consigo solucionar.

Actualmente tengo una escena con una cámara en modo ortografico, y dentro de la cámara varios objetos que se mueven con ella, se que parece algo extraño pero tiene lógica...

El problema lo estoy teniendo con un Canvas con una animación con iTween, exactamente tengo, un gameobject vació en el que he metido un canvas, este canvas los tengo en el render mode en "world" porque necesito hacer una animación con el y sacarlo de pantalla, cosa que no puedo hacer con un canvas en pantalla completa.

El canvas esta a 1920x1080, con la escala 0.001 en X,Y y Z pero tengo un script que al iniciar el juego me lo redimensiona al tamaño de la pantalla del dispositivo (calcula los pixeles de ancho y alto) teniendo en cuenta el tamaño de la camara en ortográfico para que ocupe el 100% de la pantalla del dispositivo.

Dentro del canvas tengo un texto a 160p animado con iTween, pegando saltos en loop y detrás un panel blanco sin transparencia, que tapa el juego que esta detrás

El problema que tengo es que la animación del texto en Android va poco fluida.. parece que va a 30FPS, he probado a poner el canvas en los otros 2 modos que tapan toda la pantalla, y se ve mucho mas fluido el movimiento.

He probado de todo, cambiar el texto y quitarle raycasting a todo dentro del canvas, cambiar el tamaño de fuente, quitarle el richtext y todas las opciones que hagan que consuma mas, transparencias y todo al texto, pero nada, no consigo una animación fluida en el modo "world". Lo mejor de todo es que el juego va perfecto, pero el canvas en frente va poco "smoth".

Si se pudiera "sacar de pantalla" con animaciones el canvas en los modos a pantalla completa, me daría un poco igual, pero para poder hacer eso necesito el modo "World".

¿Alguna idea de porque este problema de rendimiento en este modo?

 

Saludos.

Edited by Ben

Share this post


Link to post
Share on other sites

Lo del canvas colgado del gameobject debe ser tu problema, digamos que es al revés de lo que debería ser.

Luego mover una cámara con gameobjects de hijos también es costoso. Estoy convencido por tu nivel de experiencia que, aunque te parezca lógico hay otras maneras de hacer eso extraño que dices.

El concepto de "sacar de pantalla" que significa? Puedes mover un objeto fuera del viewport de un canvas sin problemas.

PD: 10 a 1 a que acabamos hablando de layers.

Share this post


Link to post
Share on other sites

Sobre lo del canvas siempre pensé que solo estaba pensado para "objetos 2D", por eso no pensé nunca en hacer lo inverso (meter cualquier cosa que no sea de UI dentrod el canvas), tendré que probar lo que me comentas y meter el gameobject contenedor dentro del canvas y probar.

Lo de la cámara la verdad es que no me esta dando problemas, el rendimiento es bastante bueno y realmente la cámara solo se mueve en casos particulares, no siempre, el problema de rendimiento lo tengo aun con la cámara parada.

Sobre lo de sacar de pantalla me refiero a, por ejemplo, tener un canvas con un panel al 100% para que haga de fondo, y dentro unos botones o imágenes, y lo que quiero es que al darle a un botón, mover todo fuera del área de la cámara haciendo un efecto de slideOut sacando todos los elementos por un lado (en plan position.x = screen.width para que se salga por la derecha).

Lo de lo layers no lo pillo, ¿es una pregunta trampa? :P ahora mismo estoy renderizando en la cámara todos, pero es que realmente no tengo tantos objetos, no creo que sea ese el problema.

Gracias!.

Share this post


Link to post
Share on other sites

No era una pregunta trampa. Era en relación a la cámara pero olvídalo. Vayamos por pasos.

Si colocas un panel del UI (que está dentro de un canvas que no se mueve) y dentro los objetos, luego mueves el panel y ya está!

Share this post


Link to post
Share on other sites

Cierto, usando el plano puedo mover lo que tengo dentro sin problemas!

aun así sigo con problemas de rendimiento, me ha dado por mirar el profiler comparado con un projecto nuevo con solo el texto y el script para animar el texto, he probado a sacar el canvas del gameobject, meter el canvas fuera de todo, desactivar los demás elementos de la escena y me mejoro el rendimiento, al final me he dado cuenta que los FPS me bajan una burrada al poner las 2 luces (area y directional), si las pongo en "backed" en vez de realtime, la animación del canvas me va fluida, pero luego la escena 3D no me muestra las sombras correctamente...

¿No se puede hacer que el canvas ignore las luces de la escena? (o que las luces ignoren el canvas, he modificado el culling mask para omitir el layer UI y he metido el canvas en ese layer)

Me parece muy raro que unas luces de la escena hagan tanto en el rendimiento del canvas...

 

PD: He estado trasteando un poco, quite una luz y aumenta el rendimiento casi 80fps (en el editor), pero una cosa que he visto que consumía bastante también eran unas imágenes debajo del texto que muevo que baje de resolución (sprite2D -> override for android -> max size 128k), aun así, me parece taan raro que las luces de la escena 3D afecten al canvas, porque los FPS del juego no bajan de 60.

Edited by Ben

Share this post


Link to post
Share on other sites

×
×
  • Create New...