martes, 3 de febrero de 2015

Crea un videojuego con Unity3d (ProgramaciónIII, Colliders y Collision)

Después de una larga semana... intento hacer el tutorial siguiendo la línea del anterior:
También, como siempre, os dejo el primer artículo de toda esta "saga" para que vayáis llevando un orden: Aquí os lo dejo.

Dicho todo esto y antes de continuar, comentaros que me e pasado a la versión de Unity3d de pago, por eso se verá la interfaz casi negra (cosa que se agradece cuando estás muchas horas delante de ella), pero que no haré nada que no se pueda hacer con la versión free.

 Bien, una de las cosas que tenemos que hacer para que las colisiones se produzcan, tal como lo estamos planteando ahora, es añadir un componente nuevo al cubo que usamos para movernos, dicho componente es: RigidBody. 

¿Cómo? Pues seleccionando  el cubo y en el inspector--> iremos a Add Component. Ahí escribiremos RigidBody y aparecerá. (no pongáis el de 2d que no hará su función correctamente).

Después de añadirlo, iremos de nuevo al script que teníamos la semana pasad: 

En el artículo anterior  expliqué la primera parte del código, la función en la cual hacemos mover a nuestro cubo.
Ahora explicaré la segunda: 

La función "OnTriggerEnter": 

Esta función es especifica y siempre se tiene que escribir igual para declararla.
Hay tres tipos de función para llamar cuando algo colisiona con un trigger:

1- OnTriggerEnter : se debe llamar cuando queremos que la orden se ejecute cuando un objeto entra en el trigger.

2- OnTriggerStay : se debe llamar cuando queremos que la orden se ejecute constantemente mientras un objeto está dentro del trigger.

3- OnTriggerExit : se debe llamar cuando queremos que la orden se ejecute cuando un objeto sale del trigger.

También debemos llamar a una variable dentro de la misma función. De la forma que está escrita en la imagen: (Collider col), así creamos una variable de tipo Collider llamada "col" o como nosotros queramos que es la que luego nos proporcionará los datos que necesitamos.

Una vez hayamos decidido cual de las tres funciones necesitamos para lo que queramos hacer y creada la variable, abrimos "{" y escribimos  lo que pasará cuando colisione con un trigger.

En nuestro caso:
Creamos una condición en la que decimos "si el objeto que colisionamos tiene el tag (ahora explico lo del tag) con el nombre "obstaculo" entonces...{"
Que escrito en el código es: "if (col.gameObject.tag == "obstaculo"){"
Y si entra en esa condición: Debug.Log ("Obstaculo pasado"); en el primer artículo de la programación: aquí, podéis repasar que es eso del "Debug.Log(""); 
Por último cerramos } por cada uno abierto, como siempre.

Bien, antes de continuar, ¿Qué es el tag en Unity3d?
El tag es un nombre que le damos a uno o varios objetos desde el inspector, pudiendo crear o usar los que ya están creados.
Una vez dados esos nombres podemos acceder a él mediante código, escribiendo el nombre de un objeto o variable y .gameObject.tag == "al nombre del tag" 

¿Cómo crear un tag en unity3d?

Sencillo: 
1-Seleccionamos el objeto que vamos a cambiar el tag.
2-Vamos a la pestaña Tag  Untagged 
3-Vamos a: Add Tag...
 En un espacio vacío escribimos el nombre del tag nuevo que queramos hacer.
 Seleccionamos de nuevo el objeto y al ir de nuevo a la pestaña Tag nos aparece el nuevo en la última posición, solo tenemos que clicar sobre él y ya está.

Ahora si guardamos el código, y ejecutamos, veremos como en la consola cuando pasamos por el trigger con ese tag se escribe lo que pusimos en el Debug.Log (""); 

Pero si seguimos para adelante, veremos como el objeto que NO es trigger no nos deja pasar, eso es porque tiene la propiedad Collider sin haber activado el trigger, es decir es una colision  entre objetos.

Para acabar, y no extenderme más,  decir que las funciones que podemos llamar cuando colisionamos con algo, se escribe casi exactamente igual que con los collider:

En vez de OnTriggerEnter, escribimos OnCollisionEnter.
Y la variable no será un Collider si no un Collision.

por lo demás podemos escribir con el tag igual que en la anterior. Así que si queréis hacer pruebas de Debug para cuando choquemos con la pared invisible pues os invito a ello!

Creo que ya está...a groso modo podemos decir que la semana siguiente empezaremos a usar lo que sabemos para nuestro juego.

¡¡Que  tengáis buena semana!!

Artículo Anterior de Programación                         Siguiente

No hay comentarios:

Publicar un comentario