miércoles, 9 de abril de 2014

Interfaz en Unity3D

Dentro de Unity3D se pueden hacer interfáces bastante simples con apenas unas líneas de código, todo el que empieza con Unity3D, una de las primeras cosas que aprende a hacer es crear un botón y como detectar la pulsación.
Pero lo que no te enseñan en los tutoriales básicos de Unity3D es que la interfaz que puedes crear por defecto es bastante deficiente.

¿Por qué?
Un amigo mío pensaba que era porque hacía llamadas mucho mas constantes que el update, pero es muy fácil de comprobar que eso es falso, ya que si haceis un debug de Time.deltatime, podréis ver que, tanto el evento Update, como el evento OnGUI, tienen el mísmo tiempo desde su última ejecución prácticamente, de manera que eso no sería muy notable.

Al investigar me di cuenta de que cada elemento de la interfaz creaba una draw call.

¿Que es una draw call?
La traducción literal sería "Llamada de dibujo", básicamente sería pedirle que dibuje algo en pantalla, en este caso podría ser un botón, una etiqueta, un scroll, un selector, etc...

De manera que las interfaces como un menú, tendrían por cada botón una llamada a dibujo, por cada caja, por cada texto...

¿Por qué eso es malo?
En ese caso no es para nada óptimo por algo muy sencillo, imagina que tu madre te pide que friegues, pero no todo, friega un plato, y cuando vuelves te dice que frieges una cuchara, y cuando vuelves un tenedor y cuando vuelves otra cuchara... ¿No tardarías menos en hacerlo todo de una vez en el orden que te digan directamente que ir viniendo para que te diga tu madre que fregar? pues mas o menos lo mismo.

¿Que hacer contra esto?
Pues hay dos alternativas viables para mi gustoa  no ser que consiederes por ti misma o por ti mismo que no merece la pena enredarse mas que en eso.

Una de las maneras sería hacer tu mismo tu propia interfaz a través de objetos 3D, aunque sean planos, pero no llamarán a las dichosas draw calls.

Otra alternativa es usar interfaces creadas por otros usuarios que estén ya optimizadas.

Como no voy a recomendar algo que no he provado, aconsejaré encarecidamente NGUI, ya que este es el que estoy empezando a usar y tiene muchas, muchísimas ventajas.

Igualmente dejaré algunos enlaces para poder comparar estilos y precios porque lo mejor es poder comparar por ti mismo:

NGUI: http://u3d.as/2vh (Mi recomendación personal)
Daikon Forge GUI Library: http://u3d.as/5dQ
Power UI: http://u3d.as/5cb
Noesis GUI: http://u3d.as/55A

Aunque todos estos son de pago, ciertamente te ahorrarán muchísimo tiempo en crear tu propio editor de interfaces óptimo y fiable, estos tienen muchas, muchísimas cosas que te ahorrarán tiempo en tu desarrollo y poder dedicarlo a cosas mas importantes como en el desarrollo de la jugabilidad.

En mi opinión no solo es no reinventar la rueda si no que además. puede servir de aprendizaje y a nivel práctico para ahorrar tiempo.

Por último decir que en especial NGUI, cuenta con soporte y una comunidad detrás además de incluso plugins añadidos a este mismo plugin, esto mismo lo puedes encontrar en cualqueira de los otros anteriormente nombrados, especialmente para el Daikon Forgue GUI Library

Espero que sirva y en caso contrario, ya haré un tutorial de como hacer interfaces sin draw calls a través de 3D o incluso 2D que ya incorpora Unity3D

No hay comentarios:

Publicar un comentario