1 Portada contraportada staff:Pรกginas maqueta 21/09/2010 18:12 Pรกgina 1
U โ ข DEV
Unity 3
1 Portada contraportada staff:Pรกginas maqueta 21/09/2010 18:14 Pรกgina 3
1 Portada contraportada staff:Páginas maqueta 21/09/2010 18:13 Página 2
UDEV
EDITORIAL Hola a todos/as, como orgulloso director de UDev os doy a todos la bienvenida a este primer número.
Cargo: Director Nombre: David Collado e-mail: webmaster@unityspain.com
Cargo: Editora Nombre: Ángela Espelta e-mail: wolveskiller.osk@gmail.com
Cargo: Maquetador Nombre: Eduardo Echevarría e-mail: eduetxbe@gmail.com
Ha pasado mucho tiempo desde que este proyecto empezó a fraguarse, pero no ha sido hasta ahora, y gracias a un grupo de muy buenos profesionales, que se ha podido dar vida a la revista que estáis viendo. No puedo sino agradecer su colaboración a aquellos que han apoyado la creación de la revista desde quesolo era una idea, a la gente que veis en el staff y por supuesto, a vosotros, lectores, que nos habéis animado a continuar trabajando. Todo el contenido que veis en la revista esta realizado para este número y es una muestra de lo que podréis ver en próximas entregas. UDev nace como una revista completamente gratuita, por lo que espero que apreciéis la labor realizada y enviéis vuestras sugerencias para la próxima. Un cordial saludo, David Collado,
Cargo: Ilustrador Nombre: Javier Moreno e-mail: freemindart@hotmail.com
Director UDev
CONTENIDO
EN ESTE NÚMERO
Artículo: Avance Unity 3 Nombre: Julian Oliden e-mail: julolicu@gmail.com
AVANCE La evolución y la revolución ................................. 5
ENTREVISTA Aquiris .................................................................. 9 Artículo: Entrevista Aquiris Nombre: Aquiris web: www.aquiris.com.br:
¿CÓMO SE HACE? Dando a luz .......................................................... 14
ARTÍCULO Lightmaps ............................................................. 19 Artículo: ¿Cómo se hace? Nombre: Jesús Pancorbo e-mail: yosoy_chusti@hotmail.com
TUTORIAL ¿Cómo hacer una IA? ........................................... 21
2 Articulo 1:Páginas maqueta 21/09/2010 18:16 Página 5
AVANCE
Unity 3 LA EVOLUCIÓN Y LA REVOLUCIÓN Primero fue el descubrimiento de un motor sencillo, intuitivo y muy documentado que por aquel entonces sólo estaba disponible para Macintosh. Más tarde fue su inicio en las tierras de Windows –plagadas de motores 3D por doquier- con una versión gratuita que ofrecía muchísima funcionalidad sin tener que gastar un miserable céntimo. Luego siguió innovando versión a versión, añadiendo funcionalidades en el propio editor como el profiler –maravilla donde las haya- o la renovada ventana animación potente hasta el infarto, por nombrar sólo un par. En la actualidad, antes de la esperada salida de la versión 3.0, nos encontramos con un engine potente, sencillo, estable, maduro y lo más importante para muchos, barato. Con una versión Free que no cuesta más que el espacio que ocupa en el disco duro, una versión Pro al precio de 1200$ - 880€ y un Unity iPhone a
300$ - 220€, podemos conseguir el engine3D de nuestros sueños. Y ahora nos encontramos con que los chicos encargados de desarrollar Unity, no contentos con mejorar el engine con funciones que todos veníamos pidiendo a gritos, como un debugger en condiciones o la unificación de Unity con su homólogo Unity iPhone, han decidido tirar la casa por la ventana aliándose con la crème de la crème de las tecnologías avanzadas de 3D integrando un sistema de occlusion culling y lightmapping, e implementando un nuevo sistema de renderizado: deferred rendering. No contentos con eso, les ha sobrado tiempo para desarrollar versiones inéditas para Xbox, Android y PS3 (las de Wii e iPhone ya existían), para pulir los shaders de la versión Pro hasta alcanzar el nirvana (profundidad de campo, luces volumétricas), crear un optimizado sistema de sonido con filtros avanzados, mejorar las colisiones y el manejo de los
www.unityspain.com
JULIAN OLIDEN assets e integrar un sistema de simulación de tejidos y encima, han tenido el detallito de “maquearnos” el First Person Controller. Y seguro que me estoy dejando alguna cosa más en el tintero, así que vayamos por partes.
“Han pulido los shaders de la versión Pro hasta alcanzar el nirvana” Empecemos por la característica más obvia que es la unificación del entorno de Unity independientemente de la plataforma a la que va dirigida. Podremos programar para Windows, Mac, iPhone, PS3, XBOX, Wii y Android usando el mismo editor, no como ahora, donde la versión iPhone , por ejemplo, es un programa separado. Una característica que ahorrará muchos problemas a los programadores que desarrollen para varias plataformas.
5
2 Articulo 1:Páginas maqueta 21/09/2010 18:16 Página 6
LA EVOLUCIÓN Y LA REVOLUCIÓN
JULIAN OLIDEN
Otra característica -mucho tiempo esperada- es integrar un debugger al estilo de cualquier compilador al uso. El uso de Monodevelop permitirá el uso de breakpoints y de las famosas funciones Step, Step into ó Step over y la exposición de variables con su valor en tiempo real mientras el juego se ejecuta. Se acabó debuggear imprimiendo texto en la consola o en pantalla, ¡por fin!
estoy hablando, pues seguid leyendo un poquito más que ahora os lo explico…
“Se acabó debuggear imprimiendo texto en la consola o en pantalla”
Avance
Lo cierto es que ésta es una funcionalidad pedida hasta la saciedad por muchos programadores y era necesaria implementarla cuanto antes. Por no hablar de que marca un antes y un después en la percepción de Unity como una solución profesional. Y empecemos por fin con la auténtica fiesta, las funciones reservadas solamente a los elegidos en el limbo de los engines AAA, con licencias de precio desorbitado y famosas por su calidad, en vista a sus espectaculares resultados en juegos por todos conocidos, me refiero al Occlusion Culling, Lightmapping y Deferred Rendering. El Oclussion Culling de Umbra, uno de los mejores –sino el mejor- en este mundo de las tres dimensiones, ha sido integrado en Unity con gracia y simpleza, como a mí me gusta. Pulsar un solo botón y el tiempo que tardas en comerte un helado es todo lo que necesitarás para disfrutar de la funcionalidad de un sistema de Oclusión profesional (disponible sólo en la versión Pro). Que no sabéis de qué
6
Occlusion Culling es un proceso que permite saber que superficies (o partes de superficies) no son visibles desde un punto de vista concreto. Es decir, aquellos objetos tapados por otros y que por tanto son invisibles desde cierta posición de la cámara, simplemente no se tratan. Hay que distinguirlo del Viewing Frustum Culling que es la función que permite que todo aquel objeto que no se encuentre dentro del cono de visión de la cámara –y que por tanto no vamos a ver- no se trate; característica que ya implementa Unity en la actualidad. El Occlusion Culling permitirá acelerar nuestras aplicaciones de una manera poco menos que asombrosa, pues solamente se tratarán aquellos objetos que realmente se van a ver en la pantalla, ni uno más. El lightmapping de Beast, utilizado para desarrollar muchos juegos comerciales de calidad AAA, obrará maravillas en la calidad gráfica de nuestras aplicaciones, añadiendo luces y sombras en unos detallados mapas de luces. Un mapa de luces o lightmap, es la cualidad que permite asignar brillo –o sombras- a la textura de un objeto de manera precalculada. Y el lightmapping de Beast es el mejor en este campo, pues permite usar lightmaps mientras el objeto está lejos de nosotros para pasar a interactuar con nuestras luces en tiempo real cuando nos acercamos a ellos, dándoles un detalle visual asombroso. Este lightmapping ha sido integrado en el editor de Unity de tal manera que nos permite decidir la calidad del lightmap, cosa que se puede hacer no sólo retocando frías variables numéricas, sino de manera visual
www.unityspain.com
2 Articulo 1:Páginas maqueta 21/09/2010 18:16 Página 7
JULIAN OLIDEN
en nuestro editor enfocándonos en el objeto de nuestra elección, más fácil imposible.
que tienen que ver con la simulación solar y de sus rayos, no tienen ni punto de comparación con los flares de toda la vida, esto sí que es otra historia.
Avance
LA EVOLUCIÓN Y LA REVOLUCIÓN
“El lightmapping de Beast es el mejor en este campo” Por último, la tercera estrella en esta función –aunque no la peor- es el Deferred Rendering, también restringida a la versión Pro . Este tipo de render permite tener todas las luces que quieras en tu escena -de tipo point, eso sí- consumiendo un tiempo de proceso marginal (práctimente ridículo). Se acabó el tener que vigilar cuánto están consumiendo las luces de las farolas, de tus hogueras o las luces que tienes puestas en las alas de tu avión. Otra funcionalidad, menos evidente pero igualmente importante es la inclusión de nuevos shaders en la versión Pro, que permitirán efectos nunca vistos, simplemente arrastrando el script elegido a la cámara. Prepárate para la madre de todas las madres en cuestión de efectos especiales: profundidad de campo, nuevos efectos de lente, efectos varios de pintura no realista, luces volumétricas, nuevos efectos bloom y rayos solares -(impresionante la demo de los molinos). El recuerdo de los viejos shaders de la versión Pro en anteriores entregas de Unity, no parece que vaya a hacer sombra a estos nuevos y renovados efectos. Algunos son viejos conocidos que han sido reescritos desde cero, como el efecto Bloom. Otros, como los
Aunque mucho me temo que su condición de shaders para la versión Pro, dejará a muchos con la miel en los labios – entre los que me incluyo-, no es menos cierto que en su versión Free nos permiten hacer uso del lightmapping. No se puede tener todo, amigos. Después de repasar las novedades más evidentes de Unity, que han sido los que han acaparado los contenidos de los artículos en revistas especializadas, nos quedan aún carros y carretas de nuevos juguetes como son las mejoras implementadas en el propio editor. La instanciación a nivel de suelo de aquellos objetos que deseemos de manera automática, algo muy necesario en opinión de todos los que hemos usado Unity (siempre se quedaban los objetos instanciados en medio de ninguna parte). Mejoras a la hora de manejar los objetos en la escena para moverlos, como la posibilidad de seleccionarlos por nombre o tipo, haciendo desaparecer de la jerarquía todos los demás –magia pura y dura-, ayudarán mucho. ¡Qué digo mucho…! ayudarán muchísimo a que podamos ajustar nuestras escenas por complicadas que éstas sean, con una gracia y una soltura que ahora mismo brillan por
www.unityspain.com
7
2 Articulo 1:Páginas maqueta 21/09/2010 18:16 Página 8
LA EVOLUCIÓN Y LA REVOLUCIÓN
JULIAN OLIDEN
su ausencia. Nos parecerá que actualmente nos manejamos como patos de feria en la oscuridad con nuestro ya casi anticuado Unity 2.6.
“Espectacular sistema de simulación de tejidos que otorga una calidad sobresaliente a nuestras escenas”
Avance
Exactamente lo mismo puede decirse de nuevo sistema visual para navegar por assets en Unity, en vez de tener que usar una simple lista para elegir nuestra textura o material en un objeto determinado, ahora se abrirá ante nosotros una ventana que nos mostrará todos y cada uno de los assets de manera visual, muy al estilo de cómo vemos las fotos con el explorador de archivos de Windows. Esto facilitará mucho la tarea de ‘trastear’ en grandes proyectos donde el número de assests crece a velocidad de vértigo, pues nos permite la opción de filtrar el contenido por nombre en la misma ventana, algo que muchos agradecerán sobremanera. No había acción más ingrata a realizar en Unity que intentar cambiar la textura de un modelo 3D usando aquella dichosa lista de texturas interminable. Era la pesadilla personificada y ganas le entraban a uno de maldecir Sr. Higgins y sus progenitores, cuando veías desplegarse la malévola lista frente a tus cansados ojos. Siempre me pareció que los chicos de Unity lo hicieron así a posta, sólo para cachondearse a nuestra costa y ahora han rectificado, dando por terminada la broma. Como quien no quiere la cosa, nos encontramos también con sorpresitas en las colisiones, que ahora permiten filtrar su interacción mutua mediante layers y la posibilidad de hacer colisiones de cálculo intensivo, que no permitirán que más objetos pasen volando a través de las paredes. Este sí que es un problema con el que todos los usuarios hemos tenido que lidiar antes o después y se agradece que hayan puesto a nuestra disposición una funcionalidad que permita subsanarlo (a costa, eso sí, de consumir potencia de nuestro ordenador).
También nos encontramos con tímidos retoques en el sistema de partículas, que ahora permiten ser rotados en el particle emitter, una pequeña tontería que pocos han echado de menos, pero que dará bastante juego. Un servidor lo ha probado y se nota bastante dependiendo de las partículas que estés haciendo. También tendremos a nuestra disposición un espectacular sistema de simulación de tejidos, realmente fácil de usar y que otorga una calidad sobresaliente a nuestras escenas. Además de ser sencillo de configurar, es interactivo pues permite detectar las colisiones y reaccionar ante ellas, dependiendo de las propiedades del tejido : masa, densidad, etc. Esta es una funcionalidad que nadie se esperaba (yo esperaba más bien algún tipo de simulación de líquidos, ¡snif!) pero que será muy bien recibida. Ahora podremos poner banderas a ondear y ropa tendida en nuestras escenas, que se comportarán con un realismo sorprendente. ¡Sorpresa inesperada!. Dispondremos de un sistema de creación de árboles paramétricos, es decir, se crean dependiendo de los parámetros que pongamos. Todo ello de manera visual aunque un poquito complicado para mi gusto por el número de variables a retocar, aunque he de reconocer que seguramente se podrán hacer unos modelos sorprendentes, será cuestión de esperar y ver qué consiguen hacer los usuarios con éste nuevo juguete ‘made in Unity’. La ventaja de usarlos aparte de darnos diversidad -¿cansado de usar los terrain assets de siempre?- es que también nos otorgan la posibilidad de animarlos definiendo zonas de viento que podremos ajustar a nuestro gusto, consiguiendo con ello movimientos mucho más reales que los vistos hasta ahora. Es de esperar que las escenas que impliquen el uso de terrains, ganarán mucha calidad usando este tipo de árboles paramétricos, que se comportarán de modo mucho más real. Quién sabe, quizá sea el inicio a una nueva generación del árboles interactivos y destruibles al más puro estilo Crysis. Supongo que será cuestión de esperar y ver lo que dan de sí. Otra pequeña mejora digna de mención es la actualización de los script del First Person Controller, nuestro querido andador por defecto, que ha pasado de ser un simple andador -efectivo pero falto de ideas-, a un pequeño Spiderman cilíndrico con posibilidad de deslizarse por cuestas o subir a plataformas móviles; mejora que agradecerán es-
8
www.unityspain.com
2 Articulo 1:Páginas maqueta 21/09/2010 18:16 Página 9
LA EVOLUCIÓN Y LA REVOLUCIÓN
JULIAN OLIDEN
pecialmente aquellos menos duchos en el arte de la programación y principiantes en general, por las posibilidades que brinda persé.
la posibilidad de esculpir carreteras en el terrain tal y como otros engines hacen, desde el propio editor.
No es que tenga intención de dejar muda a nuestra nueva versión de Unity, y es que el nuevo sistema de sonido ofrece mucha más potencia que su predecesor. Podremos configurar la manera en que el sonido se desvanece con la distancia, añadir filtros sonoros (ruido, eco, etc) y podremos usar módulos .mod. Una vieja reliquia que un servidor conoció y usó -con unos editores para MS-DOS que eran la bomba- que permiten efectos de sonido o música utilizando ficheros de tamaño ridículo. Todo ello con una calidad más que aceptable. Muy útiles para sonidos en juegos online o para iPhone/Android, donde usar sonido convencional es un hándicap. Estos módulos MOD, fueron muy usados en juegos para Amiga y MS-DOS y han sido rescatados con gracia (a mí por lo menos se hace gracioso y ocurrente) del baúl de los recuerdos para gusto personal de un servidor y gusto general de los programadores de juegos Online y/o plataformas móviles.
Avance
“Ya no hay necesidad de portar, todas las plataformas están unificadas”
Aún cuando hay aplicaciones de terceros que ya ofrecen estas funcionalidades, no estaría mal que en un futuro fueran implementadas dentro del propio motor. Si algo saben hacer bien los chicos de Unity es darnos potencia y funcionalidad profesional sin complicarnos la vida a los usuarios finales. Los interfaces que crean son sencillos hasta el aburrimiento y es que así da gusto aburrirse, ¿a que sí?.
También me voy a dar la pequeña licencia de comentar las ventajas que vamos a ganar todos los programadores de iphone: La primera y más inmediata es la utilización de un editor mucho más moderno que el incluido en el Unity iPhone 1.7, por fin. Tarde pero ya está aquí, ¡aleluya! La segunda es la no necesidad de portar un proyecto de una plataforma a otra, pues todas las plataformas están unificadas. Una ventaja inherente a la unificación de todas las plataformas bajo una misma aplicación y que un servidor va a agradecer infinitamente. La tercera es poder utilizar el sistema de occlusion culling de Umbra en vez de aquel que nos ofrecían en las versiones anteriores, que aunque funcional no llega a los niveles de perfección de este nuevo sistema. Y el sistema de lighmapping, muy necesario en entornos de bajo rendimiento como el iPhone. Por último, quizá no estaría mal comentar cosas que podrían echarse de menos, aún con la salida de Unity3, como un editor visual de GUIs y uno de shaders. La optimización de los GUIs para versión iPhone, un sistema de sprites al estilo de SpriteManager2 disponible para todas las versiones (anunciaron sprites para la versión iPhone pero no he tenido ocasión de ver si realmente está implementado) y
www.unityspain.com
9
3 Entrevista:Páginas maqueta 21/09/2010 18:17 Página 11
ENTREVISTA
AQUIRIS AQUIRIS * ¿Cúando y cómo descubriste Unity? Descubri unity en 2006 navegando por internet buscando un buena herramient para Aquiris, pero era solo para Mac, por lo que ni lo probamos. Pasado un tiempo, en diciembre de 2007, decidimos comprar un Mac para probar unity, ya que la herramienta era cda vez mejor y su comunidad estaba creciendo.
* ¿Cómo empezaste con unity?¿Dónde aprendiste a desarrollar? Aquiris empezo a trabajar con unity en diciembre de 2007. Estabamos desarrollando la primera version de Super Volley Brazil. En ese momento con un motor viejo, estabamos en un momento critico del desarrollo, tubimos que decidir entre seguir con el motor viejo o cambiar a Unity. Estudiamos todos los pros y contras, tambien estabamos empezando un nuevo proyecto por lo que debiamos tomar una decision. Analizando el caso, decidimos que unity era mas flexible, potente y personalizable y compilaba para Mac, PC y Web. Cambiamos todos nuestros ordenadores por Mac´s, ya que en 2007 no habia editor para windows aun. Entonces comenzamos la produccion del proyecto que estabamos empezando, Kibon Laka Game Show como una prueba de las capacidades de Unity y para sa-
ber si podría cubrir nuestras necesidades. Después de hacer este juego, estabamos seguros de que unity seria nuestra herramienta principal, por lo que el juego de Super Volley Brazil fue trasladado a Unity por completo y nuestros nuevos proyectos fueron comenzados con Unity tambien. Aprendimos usandolo, nuestro primer proyecto fue un buen principio. Las cosas mas importantes que nos hicieron aprender rápido fueron que la comunidad es extramadamente útil, los tutoriales estan muy bien escritos, Unity tiene una linea de aprendizaje muy sencilla y teniamos un plazo!
www.unityspain.com
11
3 Entrevista:Páginas maqueta 21/09/2010 18:17 Página 12
AQUIRIS * ¿Cuales son tus consejos para nuevos usuarios?
* Hablemos de tu juego, Super Volley Brazil 2. ¿Por qué un juego de volley?
Leer la documentación, Unity tiene una gran cantidad de funciones útiles que jamás habrias imaginado. Usar C#, es mas flexible, permite un mejor uso del framework .NET y es Type Safe. Tened cuidado realizando cualquier cosa con la inerfaz sencilla del editor, con grandes proyectos puede ser un cuello de botella, haced todo lo que podais mediante scripts.
Entrevista
“Unity permite el desarrollo de juegos muy profesionales”
12
* ¿En tu opinión, es Unity una buena forma de negocio? Si, Unity es muy flexible, si no tienes una caracteristica que necesitas, puedes implementarla mediante un plu-
En los tiempos de Aquiris estabamos desarrollando el prototipo de un juego, Buckingfuggy y mostrando nuestro trabajo a algunas compañias. Mostramos nuestro trabajo al patrocinador del equipo de volley y todos nosotros tuvimos la idea de desarrollar un juego de volley protagonizado por el equipo oficial de volley. Teniendo en cuenta que el volley es el segundo deporte en Brasil, nos parecia una buena idea. Esta historia comenzo en 2007, la primera version estuvo disponible online a mediados de 2008. Tras el exito de la primera version, con mas de un millon de partidas decidimos lanzar la segunda version, mas elaborada, con multijugador, mas personajes, mas escenarios, version standalone, mejor jugabilidad,etc..., basicamente, esta es la historia.
* ¿Cuantas personas trabajan en el proyecto?
fesionales.
Esta segunda version ha sido realizada por 4 programadores, 4 diseñadores 3d, 1 diseñador de interfaz, 1 animador, 1 director del proyecto, 1 productor, 1 artista conceptual y la compañia de audio. El juego se completo en 3 meses.
* ¿Cual es la diferencia mas importante entre unity y otros softwares de desarrollo de videojuegos?
* ¿Como trabaja tu equipo de desarrollo, realizais algunos artworks antes de comenzar con el desarrollo?
El editor de niveles sencillo y la programacion basada
Por supuesto, usamos un GDD para guiar todo el desarro-
en comportamientos .
llo. También solemos realizar concept arts para los perso-
gin en c++, y tambien ofrece una linea rapida para los assets. Unity permite el desarrollo de juegos muy pro-
www.unityspain.com
3 Entrevista:Páginas maqueta 21/09/2010 18:17 Página 13
Entrevista
AQUIRIS
najes y los escenarios. Dependiendo del tiempo que tengamos para entregar el juego, usamos GDD´s mas detallados y artworks. El equipo de programacion normalmente empieza realizando la logica del juego a la vez que se realizan los artworks. Despues de que reciben los artworks, montan la base del juego y realizan las modificaciones necesarias para encajar por completo a los artworks como particulas, efectos... Despues de todo se incluye el sonido. Tambien tenemos testeos semanales, por lo que la busqueda de bugs y los ajustes de jugabilidad se hacen en tiempo real sobre la programacion.
“La busqueda de bugs y los ajustes de jugabilidad se hacen en tiempo real sobre la programacion” El menu del juego es impresionante ¿Ha sido dificil desarrollarlo bajo unity? ¿Que problemas encontrasteis? ¿Algun consejo que puedas compartir a la hora de crear un menu? El menu esta realizado en 3D, excepto la ventana de multijugador. La parte en 3d ha sido desarrollada usando animaciones de 3ds max enlazandolas a cada evento. La ventana de multijugador usa la clase GUI de unity, que ofrece una serie de herramientas que hacen la construccion de gui mas sencilla.
Tuvimos problemas con el formato del texto, necesitaremos implementarlo de forma personalizada la proxima vez. Tambien tuvimos problemas con el menu •D y las animaciones, algunas veces la animacion no se reproducia por completo y lo sulucionamos metiendolas en un update loop. Tambien olvidamos algunos tipos de funciones LooseFocus() para ayudar en el control de enfoque de los espacios para texto. Aun asi el proceso principal fue muy bueno.
* El juego tiene muy buenos gráficos ¿Fue dificil optimizarlo en Unity? ¿Cómo lo hicisteis? Unity incluye una muy buena compresion para texturas, pero para la versión web reducimos las resoluciones. Los modelos fueron realizados usando una tarjeta grafica como objetivo, por ejemplo, tomamos la GeForce 5200 como parámetro y hacemos los modelos basandonos en las referencias de la tarjeta, teniendo en cuenta la cantidad de triangulos, las compatibilidades en texturas, shaders, etc... Intentamos compartir el mayor número de materiales y agrupar los objetos de forma que pudieramos reducir las draw calls.
* Las animaciones de los personajes son variadas y suaves. ¿ Que software usasteis para animar los personajes? ¿Cómo lo importasteis a Unity?¿Encontrasteis algun problema en el proceso? Usamos 3ds Max, el plugin FBX standard y el importador de animacion de Unity para configurar el nombre de las
www.unityspain.com
13
3 Entrevista:Páginas maqueta 21/09/2010 18:17 Página 14
Entrevista
AQUIRIS
animaciones y los frames. Encontramos algunos problemas, compartimos las animaciones entre todos los personakes para reducir el timeframe y el tamaño del archivo. 3Ds max character studio no nos permitia tomar la escala y posicion de la animacion al exportar, y Unity reconocia esos keyframes, y no permitia que fueran eliminados en la importacion de assets. Por esto, usar character studio al compartir una animacion entre personajes de distinto tamaño provocaba cosas extrañas. Decidimos hacer todo el set de animaciones usando el sistema de huesos de 3D Max, esta tecnica nos permitio extraer la escala y la posicion de los keyframes al exportar, pero no permitio algunos trucos como reflejar una animacion para hacer su version izquierda, por lo que supuso un trabajo extra que no estaba planeado.
“Unity realmente se sobrepone a la compleja teoria de redes”
de empezar a desarrollar un juego multijugador, como Nat, tecnicas de compensacion de Lag, etc... Debeis intentar mandar solo lo que necesitais, nunca mandeis informacion que pueda ser guardada en el lado del cliente, o que no necesite ser exactamente la misma. En SVB2 por ejemplo, enviamos el estado del jugador, que es un entero, para determinar la animacion que se esta reproduciendo en lugar de enviar el nombre de la animacion, el tiempo, etc... porque no neccesitabamos que la animacion se reprodujese en el mismo momento exacto en todas las maquinas. Aprendimos de fuentes sugeridas por Unity, los documentos de unity en si mismos y muchas referencias de la web. Yo recomiendo la comunidad valve. Tambien es importante echar un vistazo a RakNet docs, esa es la imprementacion interna de Unity. Con esta pregunta terminamos la entrevista, muchas gracias por tu tiempo y mucha suerte con vuestro próximo juego.
* El juego tiene multijugador online. ¿Es facil desarrollar juegos multijugador en Unity? ¿Donde aprendiste a trabajar con ello? Unity realmente se sobrepone a la compleja teoria de redes. Es muy facil desarrollar un juego multijugador con el. Por otro lado, el online es un area muy compleja, incluso con unity debeis aprender todo sobre redes antes
14
www.unityspain.com
4 como se hace:Páginas maqueta 21/09/2010 18:18 Página 15
¿CÓMO SE HACE?
Product Sheet DANDO A LUZ (1ª PARTE) Saludos a todos. Antes de comenzar a hablar sobre el nacimiento y desarrollo de aquellas ideas rondantes, caprichosas y obsesivas procederé a hacer una breve introducción de mi trabajo.
JESUS PANCORBO DÍAZ Dicho esto, comencemos a meter mano a esas ideas que no nos dejan dormir y nos obsesionan a cada minuto con levantar el GOTY del año.
Comenzando
Mi nombre es Jesús Pancorbo Díaz. φ Gladiadores (Nombre provisional) Titulo no publicado. Kron Indie GamesGame Designer Senior & Design Team Coordinator
Descartado para su publicación por falta de coordinación en los departamentos de arte y programación. Todos los problemas acaecidos en dicho proyecto serán puestos como ejemplo a lo largo de éste singular tutorial, a fin de evitar posibles errores en futuros grupos de desarrollo. φ Clippox Exodus. Digital Lithium Game Designer
Tenemos un Ninja capaz de dar 50 estocadas en un segundo, o bien un mutante capaz de saltar tan fuerte que pueda cruzar el universo de esquina a esquina y ahora, queremos transformarlo en un videojuego. Muchos dirán que el guion cinematográfico es el primer paso, otros el Storyboard o el arte conceptual y mi más sincera opinión es que ninguna de todas estas cosas y otras más. Antes de gastar nuestro precioso y efímero tiempo en un proyecto sin futuro y sin visos de llegar a ninguna parte, debemos hacer una profunda reflexión sobre nuestra “bestia” ¿Es viable nuestro pro-
www.unityspain.com
yecto?, ¿Podemos hacernos cargo de un desarrollo de estas proporciones?, en caso de tener futuro comercial ¿Es acertada la relación tiempo/beneficios? Y un sinfín de preguntas más que conformaran el así llamado Product Sheet o documento de venta viable, el alma de las ideas. Posiblemente te encontraras con la terrible noticia de que el 99 % de las ideas no vayan a ninguna parte pero espera, aun hay esperanzas. Pequeños estudios sobreviven al día a día e incluso luchan codo con codo con monstruos adinerados y sus desarrollos AAA de grandes estudios pero, todos comparten un mismo comienzo, comprobar la viabilidad del proyecto antes de invertir astronómicas cifras o en caso de un pequeño estudio, horas y horas de investigación y ensayo error. Existen numerosas formas de comprobar si un proyecto es viable o no, ya sea mediante estudios de mercado que marcan
15
4 como se hace:Páginas maqueta 21/09/2010 18:18 Página 16
¿Cómo se hace?
DANDO A LUZ (1ª PARTE) tendencias mundiales claras, respuesta a la archienemiga compañía de turno (Esta luchas no nos concierne), lanzar el primer título de una nueva generación de consolas donde el competidor es casi inexistente, y el jugador obtiene poco donde elegir, entre otros muchos métodos, aunque nosotros aunaremos todos los aspectos en un único documento. Un estudio de pequeñas dimensiones debe de tener en cuenta todos los aspectos antes de iniciar la aventura del desarrollo. Un estudio pequeño no posee margen de error, todo debe quedar pactado desde el principio.
de presentarlo ante un productor potencial le estamos diciendo de manera directa que es un documento de venta, y el nombre del mismo con un buen golpe visual (1º punto a nuestro favor). Nada más. Debe de ser sencilla pero directa, aportando el alma del videojuego con un golpe de vista.
Bien, hemos decidido que vamos a realizar un Product Sheet o documento de venta porque, nuestra idea es maravillosa y a priori parece viable. Comencemos. A continuación se mostraran uno por uno los diferentes apartados que darán forma a nuestro documento y serán descritos con total detalle para la perfecta asimilación de todo el mundo.
Este debe de mostrar la relación contenido/pagina que a continuación iremos desgranando uno a uno en sus respectivos apartados. Cabe destacar que, en caso de tratarse de un Product Sheet o documento de venta en PDF y no en formato físico, cada uno de los elementos mostrados deberá tener la cualidad de enlace, pinchando sobre ellos y redireccionando al lector hasta la página deseada. Esta debe de ser una costumbre que todos debemos adoptar ya que, nuestro futuro documento de diseño deberá de pasar por numerosas manos que únicamente estudiaran la parte que les corresponda. Agiliza el trabajo y tus compañeros lo recibirán con una sonrisa.
Portada Ésta debe de ser doble, clara y concisa, una de las mayores premisas a la hora de desarrollar un videojuego.
“La portada debe de ser sencilla pero directa” No debe poseer bordes de página ni ninguna añadida marca Office o cualquier otro editor de texto, declarando claramente la primera de las hojas que el documento entre manos es un Product Sheet, acompañado de su hoja posterior con una ilustración o concept art a toda página, añadiéndole el título de la obra. De esta manera, en caso
16
JESÚS PANCORBO DÍAZ
La caña ha sido lanzada, esperemos al pez.
Índice
Descripción del proyecto He aquí el comienzo de nuestra epopeya videojueguil. En este apartado deberá quedar resumido el proyecto al completo en una extensión no superior a 1 hoja completa, 2 a los sumo. Como primer vistazo de un potencial productor deberá de ser conciso y claro, evitando los rodeos innecesarios y la saturación de palabras inservibles. A continuación se enumeran y describen las partes que lo componen.
www.unityspain.com
4 como se hace:Páginas maqueta 21/09/2010 18:18 Página 17
DANDO A LUZ (1ª PARTE)
JESÚS PANCORBO DÍAZ
Deberá contener las plataformas de juegos a la cual está enfocada el proyecto deseado. La gran diferencia de posibilidades que ofrecen las distintas plataformas de juego del mercado actual, obligaran al desarrollador a demostrar el porqué fue elegida la seleccionada para el proyecto, destacando todos los elementos por los que te has decantado por una plataforma y no por cualquier otra. No basta con tener en cuenta los pros sino que, los contras deberán ser enumerados sin llegar a incidir en sus posibles resoluciones, debido a la existencia de un apartado más adelante que detallara la forma de salvar los problemas inherentes al desarrollo de tu proyecto. Φ Particularidades de la tecnología seleccionada. Φ Posibles técnicas de modelado, iluminación y animación. Φ Tecnología usada en el apartado sonoro. φ Genero Sin una definición clara del género al que nos enfrentamos estamos perdidos. Por regla general esta idea va asociada indivisiblemente de la idea concebida en nuestra mente. Es decir, si profundizamos en el pensamiento que nos hizo tener nuestra idea para el proyecto encontraremos el género que mejor se adapta.
Φ ¿Cómo navego por el menú? Φ ¿Puedo utilizar elementos del escenario? En tal caso ¿Cómo los uso? ¿Puedo combinarlos? Φ… No son ni mucho menos todas las preguntas y posibilidades que debemos completar en este apartado pero, darán una idea general, acercando al lector del documento al apartado posterior y detallado de mecánicas de juego.
¿Quién no se ha confundido con un menú de control pésimo para un juego a priori perfecto? Es la forma por la cual el jugador se comunicara con el videojuego, de manera que le permita obtener una experiencia inmersiva o no. Posiblemente pensemos que una parte grafica atractiva y rompedora sea el objetivo a alcanzar de todo productor pero, no nos equivoquemos. ¿Quién ha jugado alguna vez a la mayor aventura de acción del momento, y ha resultado decepcionado por el pésimo control del personaje o, la inexistente IA de los NPCs o, el mal diseño de los elementos distribuidos por el mapeado e imprescindibles para la continuación de la aventura? ¿Quién no se ha confundido con un menú de control pésimo para un juego a priori perfecto?
¿Cómo se hace?
φ Plataforma diana
Existen distintos estudios, con distintos productores y distintos públicos diana que determinaran los productos lanzados al mercado por su empresa. Saber diferenciar éstos, y dirigir nuestras aspiraciones a ellos será imprescindible.
Φ Acción Φ Aventuras Φ Velocidad Φ Rompecabezas Φ Etc En caso de encontrarnos con la posibilidad de un Sub-genero deberá quedar aclarado y descrito con exactitud. φ Mecánicas de juego El esqueleto que sujeta todo videojuego. En este apartado haremos un breve repaso sobre la manera en la que el jugador interactuara con el videojuego sin profundizar en sus apartados. Φ ¿Necesito un periférico determinado? En tal caso, ¿Qué periférico necesito? Φ ¿Es una persona, ente u objeto? Especifícalo Φ ¿Corre, vuela, se arrastra…? En tal caso, ¿Cómo se desplaza? Φ ¿Puede conversar con NPCs? En tal caso ¿Afecta al universo recreado, o es simplemente anecdótico o informativo?
φ Storyline Su importancia está ligada de forma inherente al género elegido para nuestro videojuego. En este apartado, la historia, resumida en 3 o 4 párrafos deberá dar una muestra acercada y sin detalle de la trama principal del título, si lo posee. En ella, los personajes serán nombrados, no descritos, y el entorno en el cual sucede la acción total localizado. Más tarde, el Storyline se expondrá de forma completa en su respectivo apartado. Dependiendo del género seleccionado, la importancia será clave. φ Personaje principal La importancia de este elemento dentro de un videojuego, como todos sabréis, es importantísima, superando
www.unityspain.com
17
4 como se hace:Páginas maqueta 21/09/2010 18:18 Página 18
DANDO A LUZ (1ª PARTE) con creces a las propias mecánicas de juego, indivisibles al personaje principal en su inmensa mayoría.
¿Cómo se hace?
Aquí no trataremos sobre cómo crear el personaje definitivo ya que, eso puede extenderse tanto como quisiéramos y no se trata de una ciencia exacta, su creación y aceptación depende de muchos parámetros que ya explicaremos en futuras ediciones. A continuación se describen los aspectos generales a incluir en el presente apartado. Φ Aspecto físico Φ Aspecto Psicológico Φ Aspectos especiales Φ Concept Art o ilustración Hasta aquí la 1º parte de este apartado explicativo sobre la creación de un Product Sheet o documento de venta. En futuras ediciones ahondaremos en los elementos pendientes del documento y sus descripciones. Mucha suerte y no dejéis parar vuestra imaginación.
Cuando dos teorías en igualdad de condiciones tienen las mismas consecuencias, debe preferirse la teoría más simple a la mas compleja. Guillermo de Ockham (1280-1349)
18
www.unityspain.com
JESÚS PANCORBO DÍAZ
5 Articulo ligthmaps:Páginas maqueta 21/09/2010 18:22 Página 19
¿QUÉ ES?
LIGTHMAPS LIGHTMAPS
DAVID COLLADO
Un lightmap es una estructura de datos que contiene el brillo de las superficies de un modelo3d. Los lightmaps son elementos precalculados, es decir, el motor que mueve el modelo no los calcula en tiempo real como si ocurre con la iluminación dinámica.
“Los lightmaps son elementos precalculados” A modo muy básico un lightmap es una textura con la iluminación de un modelo, como si pintásemos las sombras sobre el modelo. Por supuesto, el problema común de esta técnica es que esas sombras no se mueven. Para solucionar este problema el sistema mas común es la utilización de lightmaps y luces dinámicas que se alternan según las necesidades en ese momento (distancia del jugador, fluidez del juego…)
A la izquierda un ejemplo de escena con lightmap y al la derecha la misma sin lightmap. El primer juego en utilizar este sistema fue Quake. Utilizo los lightmaps para mejorar la velocidad del juego a la vez que evitar que los suelos se vieran mal. Antes de que se inventasen los lightmaps los motores 3D utilizaban el sombreado Gouraud.
www.unityspain.com
19
6 Articulo IA:Páginas maqueta 21/09/2010 18:19 Página 21
TUTORIAL
IA CÓMO HACER UNA IA SENCILLA Antes de nada me gustaría explicar para quien va dirigido este tutorial. Aunque es sencillo, está enfocado a personas con un nivel mínimo de programación en c# y Unity. En el veremos como contruir una Inteligencia Artificial para nuestro juego de una forma rápida y sencilla. El script que iremos viendo estará escrito en C#, ya que no utilico unityscript normalmente y no veo necesario explicar como se hace en otro lenguaje, la base es la misma.
Nuestra IA Sin más, empecemos. La IA que vamos a construir desde 0 tendra 3 sencillas funciones: • Reposar • Patrullar • Atacar No voy a entrar realmente en estas acciones, es decir, no voy a explicar como nuestra IA realizará el ataque, como patrullará ni que hará mientras reposa (quizás una animación…).
Planificación No debemos tirarnos directamente a programar, hay un paso fundamental que debemos seguir y es tan válido para
DAVID COLLADO una IA como para el código de un juego de cartas. Debemos planificar. Cuando empezamos a programar, casi todos cometemos el mismo error: no planear nuestro código; algo que pese a parecer aburrido, nos ayudará mucho cuando estemos escribiendo nuestras brillantes líneas. Existen muchas formas de hacerlo, solo debéis encontrar la vuestra. En mi caso, utilizo una aplicación de PC llamada Dia. Con esta aplicación es posible hacer diagramas con los que nos será muy sencillo planificar el código que más tarde vamos a escribir. Sera aquí donde deberemos tomar las decisiones clave, y no mientras programamos. En la página siguiente encontrareis el diagrama que seguirá esta IA, que os servirá de idea o ejemplo para hacer los vuestros. En el diagrama podéis ver a simple vista el funcionamiento de esta IA. Empezamos en un estado de reposo y seguiremos en ese estado durante 5 segundos. A los 5 segundos la IA empezará a patrullar, vigilando que el enemigo no sea visible. En caso de que el enemigo sea visible (porque se encuentre dentro de nuestro rango de acción, entre en un determinado espacio, etc) le atacaremos. Si tras 5 segundos de patrullar no vemos al ene-
www.unityspain.com
21
6 Articulo IA:Pรกginas maqueta 21/09/2010 18:19 Pรกgina 22
Tutorial
Cร MO HACER UNA IA SENCILLA
22
www.unityspain.com
DAVID COLLADO
6 Articulo IA:Páginas maqueta 21/09/2010 18:19 Página 23
CÓMO HACER UNA IA SENCILLA migo, pasaremos a un estado de reposo de nuevo, reiniciando el ciclo. Con esta base tan sencilla, conseguimos un comportamiento bastante “realista”, ya que nuestra IA patrullaría, descansaría durante unos segundos y patrullaría de nuevo en un ciclo hasta encontrar al enemigo.
Conceptos previos
DAVID COLLADO riable cuyo contenido podremos ejecutar y modificar. Los callbacks también son conocidos como delegados y no son exclusivos de C#. Si estas familiarizado con los punteros a una función, un callback es muy similar, solo que tiene dos punteros: • Un puntero a un objeto (opcional) • Un puntero a un método de ese objeto
Tras esta introducción pasemos a ver algo de código.
Esto permite que un delegado o callback tenga toda la información para ejecutar un método que se encuentre en cualquier punto de nuestro código.
Empecemos por la base, para el código que vamos a ver a continuación es fundamental primero entender las propiedades en c#. A continuación expongo un ejemplo que explicaré ahora mismo.
Este punto es fundamental y muy simple, además nos permitirá crear una IA de una forma increíblemente sencilla. A continuación tenéis un ejemplo del código para declarar este callback en C# dentro de unity:
float stateTime { return (Time.time - stateStartTime); } }
La primera línea, si sustituimos la llave final por un punto y coma, podría ser simplemente la declaración de una variable de tipo float y cuyo nombre sería stateTime. Al fin y al cabo lo que estamos haciendo es esto, declarar una variable pero redefiniendo su método get, es decir, cambiando la forma en la que obtenemos el valor de esa variable. En la segunda línea encontramos una nueva apertura de llave, esta vez para definir el método get. Debemos tener en cuenta que este método debe ser breve y sencillo, ya que se ejecutará cada vez que accedamos a la variable y eso puede repercutir mucho en el rendimiento de nuestro juego, sobre todo si trabajamos en un dispositivo con poca potencia como puede ser un iPhone. En la tercera línea encontramos el contenido del método get, o sea, lo que hace. Como podéis ver, lo que hacemos es retornar el valor de Time.time, que es el tiempo que ha pasado desde la ejecución de la aplicación menos stateStartTime, una variable definida aparte que almacena el valor de Time.time al cambiar de estado. Con esta propiedad conseguimos que acceder a ese resultado sea tan sencillo como utilizar la variable stateTime donde queramos. Time.time – stateStartTime
Vamos ahora otro concepto fundamental para dar forma a nuestra IA, el callback. Un callback, en su definición, es un puntero a una parte del código, es decir, una función. Este puntero se puede cambiar fácilmente consiguiendo una va-
StateFunc stateAction;
Con la primera línea declaramos nuestro delegado, en este caso llamado StateFunc.
Tutorial
delegate void StateFunc();
get {
En la segunda línea creamos la instancia de ese delegado. Será esta la que contendrá el puntero a nuestras funciones. Ahora veamos como de sencillo es cambiar la función a la que apunta la instancia de nuestro delegado y como, fácilmente, podemos ejecutarla. Aquí tenemos el código de ejemplo para definir el método al que apunta: stateAction = Patrol;
Con esto indicaríamos que es el método llamado Patrol al que queremos apuntar, así de sencillo. No tenemos que hacer nada especial en nuestros métodos. Para ejecutar la función a la que apuntamos solo tendremos que hacer: stateAction();
Como se puede ver, la ejecución es idéntica a la de cualquier otro método. Simplemente debemos escribir el nombre de nuestra instancia del delegado seguida del espacio para los parámetros. Con estos dos conceptos en la cabeza es posible que ya sepáis como vamos a estructurar nuestro script de IA, pero a los que aún los estéis asimilando (he escrito mucho pero son nociones muy sencillas) os daré otra pista. Nuestra función Update será esta: void Update () { stateAction(); } esto la función Update queda muy limpia y evitaremos Con
www.unityspain.com
23
6 Articulo IA:Páginas maqueta 21/09/2010 18:19 Página 24
CÓMO HACER UNA IA SENCILLA “complicar” nuestro script, algo muy importante y a lo que nos ayudará el diagrama antes comentado.
DAVID COLLADO por un reposo que cambie a patrullar a los 8 segundos, patrullar durante 4 segundos, volver a un reposo durante 20 segundos para volver a patrullar durante 10…
Entrando en materia Veamos esta nueva propiedad llamada TimeScale: Realmente la parte que nos queda es la más sencilla, ya que hoy no trataré el código que iría dentro de cada función, solo explicaré como debéis crear los estados. Siguiendo con nuestro ejemplo, tenemos 3 estados; para plasmar esto en código simplemente debemos crear 3 funciones, una para cada estado. • void Reposo() • void Patrullar()
float TimeScale { get { return stateTime / timer; } }
Como podemos ver, esta propiedad nos devuelve el tiempo que llevamos en el estado actual dividido entre una variable llamada timer. La variable timer deberá ser declarada junto con todas las variables y será establecida dentro de la función CambiarEstado, simplemente almacenando el valor del parámetro NuevoTiempo.
Tutorial
• void Atacar() Además tendremos que crear una cuarta función: • void CambiarEstado(NuevoEstado,NuevoTiempo) El código dentro de las funciones de cada estado no es importante, pues no será lo que trataremos hoy, pero si hay una parte que debemos tener en cuenta: los tiempos. Como habréis notado en el diagrama, cambiamos de reposo a patrullar y viceversa después de un tiempo. Para hacer esto recurriremos al concepto básico que os he explicado: las propiedades. Obviamente, las propiedades no son obligatorias, pero si nos ayudarán en este tipo de tareas repetitivas. Veamos la propiedad que he explicado antes: float stateTime { get {
Gracias a esta propiedad simplemente deberemos comprobar al final de cada estado si TimeScale es mayor que 1. if(TimeScale > 1)
Esta sencilla línea nos indicará si el tiempo para este estado ha terminado sin tener que comparar con distintos valores. Por último, yo crearía una ultima propiedad, initialising. Esta propiedad nos indicará si acabamos de entrar en ese estado para así realizar tareas para preparar ese estado o recuperar de uno anterior. La propiedad será la siguiente: bool initialising { get { bool temp = initVar; initVar = false; return temp;
return (Time.time - stateStartTime); } }
}
Como ya he explicado antes, esta propiedad nos devuelve un valor de tipo float con tan solo utilizar la variable stateTime. Ahora podremos ver para que sirve esto. stateTime es el tiempo que llevamos en el estado actual, lo que nos permitirá saber cuando debemos cambiar de estado. Para que stateTime tenga sentido debemos inicializar stateStartTime dentro de la función CambiarEstado; función que llamaremos cada vez que queramos cambiar de un estado a otro. Una vez entendido el funcionamiento de la propiedad stateTime, crearemos otra más, llamémosla TimeScale. Esta nueva propiedad nos permitirá olvidarnos de comprobar dentro de cada estado si stateTime es mayor que el tiempo establecido (en nuestro caso 5) y nos permitirá de forma sencilla cambiar esos tiempos. Es decir, podríamos empezar
24
}
La variable iniVar será declarada junto con el resto de variables y su valor se establecerá en true dentro de la función CambiarEstado. Gracias a esta propiedad podremos comprobar al inicio de cada estado si acabamos de entrar a ese estado con una sola línea: if(initialising)
Con esto tendremos la estructura de nuestra IA perfectamente formada y solo quedara programar lo que debe hacer dentro de cada estado. Por supuesto, no es obligatorio cambiar de un estado a otro por tiempo, podemos cambiar como sea necesario (por ejemplo, si el enemigo está cerca como en el caso de nuestra IA).
www.unityspain.com
6 Articulo IA:Páginas maqueta 21/09/2010 18:19 Página 25
CÓMO HACER UNA IA SENCILLA
DAVID COLLADO
Tutorial
Espero que con esto cualquiera se anime a crear su IA para juegos, aumentando la complejidad. He intentado explicar todo lo mejor posible para exponer lo sencillo que resulta hacer una IA de esta forma, pero aún así, disculpad mis posibles errores o partes confusas. De momento os recomiendo que probéis a hacer esta, que programéis cada uno de los estados y utilicéis las propiedades donde las necesitéis.
www.unityspain.com
25