9 de enero de 2012

Controles de movimiento en Unity3D (2ª parte)

Continuando con el anterior post, voy a explicar como darle un control un poco mas realista al juego. Aunque con la función transform.Translate() podemos hacer movimientos básicos que nos valdría perfectamente para un shooter o un arcade, en este parte vamos a trabajar con la función constantForce() que permite ejercer fuerzas, condicionando de esta forma el movimiento al motor de físicas de unity3d. Este tipo de movimiento es mas adecuado para vehículos, por ejemplo.

Antes de nada, tenéis que añadir al objeto que queréis que se aplican estas fuerzas el componente "constant Force" desde el menú "component">"Physics" (este componente también añade el Rigidbody, si no estaba ya asociado al objeto).

Ahora, creamos un nuevo script y declaramos unas variables para controlar movimiento y rotación.

var velocidad = 0;
var rot = 0;
var maxVel = 10000;
var minVel = 0;
var maxRot = 100;

Ahora toca introducir las funciones para detectar los Input. En este caso vamos a utilizar otra función del objeto Input.

if(Input.GetKey(KeyCode.W))vel=vel+100;
if(Input.GetKey(KeyCode.S))vel=vel-100;

Con estas lineas tendremos una sensación mas realista de "aceleración", y para no llegar a velocidades absurdas, sentencias de control:

if(velocidad>=maxVel) vel=1000;
if(velocidad<=minVel) vel=0;;
if(rot>=maxRot)rot=100;
if(rot<=minVel)rot=0;

Añadiremos ahora estas funciones. En realidad, constantForce hace referencia a las variables de la componente que hemos añadido, y para especificar que tipo de fuerza y en que dirección queremos aplicarla utilizaremos:

constantForce.relativeForce.z=vel*Time.deltaTime;

Con esto obtenemos una aceleración algo mas escalada y limitada, todo es jugar con los números para encontrar los valores que se ajusten a lo que queremos.

Para terminar, añadiremos dos lineas que nos permitirán rotar el objeto con el ratón:

transform.Rotate(0,Input.GetAxis("Mouse X") *rot*Time.deltaTime,0);
transform.Rotate(Input.GetAxis("Mouse Y") *rot*Time.deltaTime,0,0);

Las características de estos "Mouse X" y "Mouse Y" podéis encontrarla en los Inputs preestablecidos (edit>project settings>Inputs)

Pero también podemos utilizar el Input.GetKey() para rotar el objeto de la misma forma que acelera, usando la variable que nos dejamos atrás (rot) y la función constantForce.relativeTorque:

if(Input.GetKey(KeyCode.D))rot=rot+10;
if(Input.GetKey(KeyCode.A))rot=rot-10;

constantForce.relativeTorque.y=rot*Time.deltaTime;

Dejando así el ratón únicamente para el giro en el eje X.

Con solo este puñado de funciones ya podemos hacer cosas interesantes, aunque no hay que olvidar que uno de los componentes que trae Unity por defecto es un controlador para FPS mucho mas refinado, al que podemos acceder desde component>character>FPS input controller y añadiéndolo al objeto que queramos.

Para el siguiente tutorial voy a seguir perfeccionando el control, ya que aunque ha mejorado, os habréis fijado que los variables del componente constantforce, que debería aumentar, se mantienen en unos valores pequeños, y es que esta es la variable que debería de aumentar de forma gradual. Ademas, quiero añadir un variable que reduzca la aceleración del objeto conforme la velocidad aumenta, para hacerlo mas realista.

Un saludo!

8 de enero de 2012

Controles de movimiento basico en Unity3D



Llevo unos días estudiando el engine Unity3D, que como muchos sabréis es un motor gráfico plataforma bastante potente que ha tenido un rápido crecimiento en los últimos años. A mi me resulta muy prometedor y he decidido dedicarles algunos ratillos para aprender a manejarlo.

Voy a intentar explicar algunas de las herramientas que nos ofrece unity3D para trabajar con los controles del jugador, en concreto, como podemos mover y girar objetos en el juego con unos sencillos script.

Parto de la idea de que conocéis al menos interfaz de unity3D.

  • Antes de empezar, necesitamos un terreno. Desplegamos la pestaña "Terrain" y elegimos "Create Terrain" le damos la forma que queramos y añadimos un nuevo objeto desde GameObject > Create Other y aqui elegimos un "sphere" "cube" "cylinder" o lo que queramos. Este sera el personaje que podremos mover. 
  • Busca entre sus opciones del menú Inspector y, entre las opciones del componente Rigibody, aplicarle gravedad (UseGravity)  una masa (mass) de 60, reducir el rozamiento (drag) y el rozamiento angular (AngularDrag). En el componente Box Collider aplicale un material, por ejemplo Bouncy o Metal. Desde aqui tambien podremos cambiar los valores de las variables que añadiremos mas adelante.
  • Antes de añadir los script vamos a incluir una luz direccional (GameObject > Create Other> Directional light) y la situamos para que nos ilumine bien la escena.
  • Por ultimo necesitamos una cámara que siga al objeto mientras se mueve. En Unity esto es tan sencillo como crearla a través del susodicho menú "Create Other" "Camera" y desde la "Hierarchy" añadir la cámara al objeto que creamos en el paso anterior pinchando y arrastrando.

Ahora vamos a lo que nos interesa. Voy a explicar 2 formas distintas de añadir control de movimiento a nuestro objeto. Creamos un nuevo archivo javascript desde el menú lateral "Project" y lo añadimos igual que la camara a nuestro objeto. Luego lo abrimos.

Como veréis el archivo (y todos los script que creemos en unity) empiezan por la función  update() esta función se encarga del dibujado de cada frame, así que todas las funciones que incorporemos dentro se ejecutaran mientras el juego este en ejecución y el objeto asociado estén en al escena.

La primera forma de controlar el movimiento es la forma "bruta" mediante la función transform.Translate(x,y,z)y transform.rotate(x,y,z)la primera mueve en los tres ejes y la otra rota el objeto, como ya habréis imaginado. Podríamos simplemente añadir estas funciones y ponerles un valor, pero el objeto saldría disparado sin mas en esa dirección, tenemos que condicionar estos movimientos a las teclas (inputs) y al tiempo.

Para ello vamos crear primero una variable velocidad a la que le daremos un valor 60 . Tambien crearemos una variable para la velocidad de la rotación, todo ello antes de la función update()

var velocidad=60;
var rot=30;

Ahora si, dentro del update añadimos

transform.Translate(0,0,velocidad*Time.deltaTime);
transform.Rotate(0,velocidad*Time.deltaTime,0);

La función Time.deltaTime sirve para condicionar este movimiento al tiempo, es decir, le estamos diciendo al objeto con esas lineas que se mueva en los ejes X y Z una distancia igual a "velocidad*tiempo" o mejor dicho "distancia*segundo" y rote en el eje Y al mismo ritmo.

¿y donde está el control? vamos a ello. Guardamos el script y desplegamos el menu "Edit" y elegimos Project Settings > Input. En el inspector nos aparecen todos estos Inputs que vienen por defecto. El valor "Size" indica el numero máximo que tendremos (si queréis añadir uno nuevo cambiad el valor por uno mayor) y como veréis, justo debajo tenemos los inputs "Horizontal" y "Vertical" que son para el control en los ejes X y Z. Podemos cambiarle el nombre, añadir descripciones y en "Negative button" y "Positive button" elegimos  S y A para el Negative y W y D para el Positive.

Vuelve al código, vamos a añadir la funcion Input.GetAxis() que devuelve un +1 si la tecla "w" esta pulsada y -1 esta pulsada la "s". El código nos quedaría así:

transform.Translate(0,0,Input.GetAxis("Horizontal")*vel*Time.deltaTime);

transform.Translate(0,Input.GetAxis("Vertical")*vel*Time.deltaTime,0);


Ya tenemos un movimiento, pero muy básico, la funcion transform.Translate es un poco tosca, no detecta correctamente las colisiones y en las direcciones mantiene un punto de referencia global.

Para mejorar este movimiento, en el siguiente parte utilizaremos las funciones constanceForce, que nos permiten aplicar fuerzas para un movimiento mucho mas realista

3 de enero de 2012

Aplicaciones para Google Hangouts

Buscando por la web la API de Google Hangouts para cierta aplicación que estoy desarrollando junto con Sergio, me topé con la documentación de Google para la creación de aplicaciones para su Hangouts. Éstas utilizan HTML estándar, JavaScript, y CSS para la maquetación y funcionamiento en general. El caso es que la aplicación en cuestión en la que quería usar el Hangouts está programada con la librería GWT SDK 2.4.0 de Java cedida por Google... ¿Problema? Pues que no se pueden combinar, es decir, no se pueden usar las liberías GWT de Java con los Hangouts... al menos no he encontrado la manera, por lo que me veo programando y maquetando de nuevo todo lo que ya llevaba hecho en Java... Por suerte no es excesivamente mucho.

Desarrollo de aplicaciones para Google Hangouts
Ejecución de aplicaciones para Google Hangouts

Pros: el control de video/audio e inicio de sesión ya no es necesario programarlos ya que el propio Hangouts lo controla.
Contras: toda la reprogramación.

Por otro lado, también he encontrado el registro para desarrolladores que quieran empezar a practicar con las APIs de Google. Se puede seleccionar las APIs de los diferentes elementos de Google (Hangouts, Maps, Blogger...), crear equipos de desarrollo y subida de proyectos entre otros aspectos.

Registro de desarrolladores

Un saludo, ¡Nos leemos!

30 de diciembre de 2011

Android SDK

¡Buenas! Últimamente parece ser que estoy en racha porque ciertamente encuentro un montón de material interesante en el campo de la programación y diseño de software.
En este caso os voy a presentar el SDK para Android con su emulador para PC incluido. Y es que no todos podemos permitirnos una tableta o un teléfono movil con este sistema operativo, por lo que con este programa podremos emular a varios de estos aparatejos puediendo crear "Dispositivos Virtuales Android"  (ADV en siglas anglosajonas), permitiendo testear las aplicaciones que realicemos con el SDK en nuestro propio PC. También se puede añadir un plugin a Eclipse para programar en Android desde él. Está disponible para Windows, Linux y Mac OS desde este enlace:

SDK Android
Plugin para Eclipse

Imágenes del emulador


La aplicación trae consigo un administrador del SDK con las últimas actualizaciones y demás. Espero que os sea de utilidad y os guste. ¡Nos leemos!
Saludos.

25 de diciembre de 2011

Documentación de Google SDK de Java

¡Buenas! Hoy traigo una entrada de mi campo. Trasteando con Eclipse, me animé ha comenzar un proyecto que tenemos Sergio y yo desde hace tiempo (creo que es el primer proyecto de todos los que tenemos). Se trata de una aplicación programada a través del SDK de Java que provee Google para sus aplicaciones (App Engine). El caso es que ya lo tenía todo instalado desde hace tiempo y quería comenzar ha hacer algo. Creé un nuevo proyecto, vi el código por defecto que implementaba y... me di cuenta de que no entendía nada... bueno, nada nada tampoco, pero, obviamente, al usar el SDK de Google pues la forma de implementar el código Java no es exactamente la misma, ya que utiliza métodos propios, etc. Después de un rato estudiando el código y viendo su estructura, busqué por Internet la API de Google para que me fuera todo más llevadero y encontré esto: haz clic aquí para verlo

Se Trata de la documentación del SDK de Java desarrollado por Google en donde se explica (entre otras cosas) el manejo de los elementos para el desarrollo de interfaces gráficas (que era lo que estaba buscando en ese momento). Hay que reconocer que los métodos programados por los chicos de Sergey Brin y Larry Page son excepcionales y muy cómodos a la hora de maquetar las aplicaciones, tales como el DockPanel.
Todo está perfectamente explicado en un esquisito inglés, si se te da bien el idioma anglosajón o utilizas Google Chrome no tendrás ningún problema. También puedes usar Google Translator para que te sea más llevadero. Espero que os haya gustado y os sea útil, a mí la verdad es que me ha ayudado mucho. No seguimos leyendo.
¡Hasta la próxima!

20 de diciembre de 2011

Nuevo titulo de técnico superior en Animaciones 3d y Entornos interactivos.

Esta semana pasada salio en el BOE un nuevo titulo de formación que pretende orientarse hacia la industria del videojuego. Algo como esto lo llevábamos esperando cierto tiempo Dani y yo, aunque decepciona la nula carga de programación, resultan muy interesantes algunas de sus asignaturas, sin embargo, esta muy orientado al diseño de gráficos y animaciones 2D y 3D. A continuación os pongo un resumen de lo que depara el titulo, extraído directamente del BOE:

  • Denominación: Animaciones 3D, Juegos y Entornos Interactivos. 
  • Nivel: Formación Profesional de Grado Superior. 
  • Duración: 2000 horas. 
  • Familia Profesional: Imagen y Sonido 
Establece en que consiste su competencia real del titulo:
Consiste en generar animaciones 2D y 3D para producciones audiovisuales y desarrollar productos audiovisuales multimedia interactivos



Sus competencias profesionales:
  • Deducir las características específicas de los proyectos de animación o multimedia interactiva, a partir del análisis de su documentación, para facilitar su concepción y diseño de producción. 
  • Conceptualizar el proyecto de animación 2D o 3D a partir del desglose del guión, diseñando los modelos y controlando la construcción del storyboard y la disposición y grabación del audio de referencia del programa. 
  • Producir el proyecto de animación 2D en sus fases de animática, layout, animación clave, intercalación, pintura y composición, realizando los chequeos y pruebas de línea necesarias hasta la obtención de las imágenes definitivas que lo conforman. 
  • Producir el proyecto de animación 3D en sus fases de diseño y modelado, setup, texturización, iluminación, animación y renderizado, realizando los chequeos necesarios hasta la obtención de las imágenes definitivas que lo conforman. 
  • Controlar la realización de los procesos de postproducción de proyectos de animación 2D y 3D, supervisando la incorporación de efectos de edición y la construcción de la banda sonora del programa. 
  • Conceptualizar el proyecto multimedia interactivo, concretando la definición de sus funciones, su arquitectura tecnológica, la planificación de las fases de trabajo y las características específicas de las fuentes. 
  • Generar y adaptar los contenidos del proyecto multimedia interactivo, creando las fuentes y maquetas, evaluando su calidad y comprobando la adecuación de las mismas, tanto las propias como las provenientes de colaboradores externos. 
  • Integrar los elementos y las fuentes con herramientas de autor y de edición, llevando a cabo su composición, la generación y sincronización de sus movimientos, la creación de sus elementos interactivos y la dotación de interactividad según los requerimientos del proyecto multimedia interactivo. 
  • Realizar la evaluación del prototipo y la documentación del proyecto, asegurando el cumplimiento de las normas de calidad y la configuración de los parámetros de publicación. 
  • Aplicar las herramientas de las tecnologías de la información y la comunicación propias del sector en el desempeño de las tareas, manteniéndose continuamente actualizado en las mismas. 
  • Adaptarse a las nuevas situaciones laborales, manteniendo actualizados los conocimientos científicos, técnicos y tecnológicos relativos a su entorno profesional, gestionando su formación y los recursos existentes en el aprendizaje a lo largo de la vida y utilizando las tecnologías de la información y la comunicación. 
  • Resolver situaciones, problemas o contingencias con iniciativa y autonomía en el ámbito de su competencia, con creatividad, innovación y espíritu de mejora en el trabajo personal y en el de los miembros del equipo. 
  • Organizar y coordinar equipos de trabajo con responsabilidad, supervisando el desarrollo del mismo, manteniendo relaciones fluidas y asumiendo el liderazgo, así como aportando soluciones a los conflictos grupales que se presenten. 
  • Comunicarse con sus iguales, superiores, clientes y personas bajo su responsabilidad, utilizando vías eficaces de comunicación, transmitiendo la información o conocimientos adecuados y respetando la autonomía y competencia de las personas que intervienen en el ámbito de su trabajo. 
  • Generar entornos seguros en el desarrollo de su trabajo y el de su equipo, supervisando y aplicando los procedimientos de prevención de riesgos laborales y ambientales, de acuerdo con lo establecido por la normativa y los objetivos de la empresa. 
  • Supervisar y aplicar procedimientos de gestión de calidad, de accesibilidad universal y de «diseño para todos», en las actividades profesionales incluidas en los procesos de producción o prestación de servicios. 
  • Realizar la gestión básica para la creación y funcionamiento de una pequeña empresa y tener iniciativa en su actividad profesional con sentido de la responsabilidad social. 
  • Ejercer sus derechos y cumplir con las obligaciones derivadas de su actividad profesional, de acuerdo con lo establecido en la legislación vigente, participando activamente en la vida económica, social y cultural 

El ciclo de formación profesional se compone de estos módulos:
  • 1085. Proyectos de animación audiovisual 2D y 3D.
  • 1086. Diseño, dibujo y modelado para animación.
  • 1087. Animación de elementos 2D y 3D.
  • 1088. Color, iluminación y acabados 2D y 3D.
  • 1089. Proyectos de juegos y entornos interactivos.
  • 1090. Realización de proyectos multimedia interactivos.
  • 1091. Desarrollo de entornos interactivos multidispositivo.
  • 0907. Realización del montaje y postproducción de audiovisuales.
  • 1093. Proyecto de animaciones 3D, juegos y entornos interactivos.
  • 1094. Formación y orientación laboral.
  • 1095. Empresa e iniciativa emprendedora.
  • 1096. Formación en centros de trabajo

Se establecen las siguientes disposiciones en correspondencia con el ciclo.
  • Referencia del título en el marco europeo. 
  • Oferta a distancia del presente título. 
  • Titulaciones equivalentes y vinculación con capacitaciones profesionales. 
  • Equivalencias a efectos de docencia en los procedimientos selectivos de ingreso en el Cuerpo de Profesores Técnicos de Formación Profesional. 
  • Accesibilidad universal en las enseñanzas de este título. 
  • Título competencial. 
  • Implantación del nuevo currículo en el 2012/2013.

17 de diciembre de 2011

Postmortems. La mejor herramienta para el desarrollo de videojuegos

Bueno, publico mi primera entrada y así le hago un poco competencia a Sergio, tratando el tema de los videojuegos. Acabo de ver un artículo bastante interesante acerca de los postmortems ¿De qué se trata? Bien, a menudo una mala gestión de los recursos de los videojuegos, valoración de la magnitud del proyecto, mal cálculo de los tiempos, fallos de producción, etc, lastran el desarrollo del mismo. En la siguiente página se comparten estos postmortems difundidos para la comunidad para así no repetir los mismos errores y no volver a tropezar con la misma piedra dos veces.
Títulos tan reconocidos como Bioshock, Rachet & Clank o Uncharted se muestran aquí.
También existe una base de datos con multitud de archivos postmortems aquí.
¡Nos leemos!