Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

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!

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!