martes, 17 de febrero de 2015

Crea un videojuego con Unity3d (Programación V, el disparo)

Y de nuevo nos juntamos para machacar teclas cómo dice un amigo mio!

Bien, hoy seguimos con nuestro juego, el cual estamos a punto de acabar!!! jajajaja es broma xD aún falta un poco, pero de programación si es cierto que, entre dos y tres semanas creo que ya estará acabado!

Recordad que AQUÍ podéis visitar el primero de los artículos para seguir las pautas que estoy dando.

También decir que hoy en Cómo hacer un videojuego con unity3d, programaremos el disparo, cómo dije la semana pasada en el artículo anterior.

El disparo lo haremos por el método más  lento y no por el de rayCast  que de él hablaremos en otros tutoriales.
Lo que haremos será crear una bala física y dejar que esta avance por si sola en una dirección.

Para empezar cargaremos el Asset Controller, para ahorrarnos tiempo de código.
 Una vez cargado, seleccionaremos el First Person Controller y lo arrastraremos al lugar que queramos, ahí escalaremos el objeto.

Desactivamos las dos scripts marcadas en la imagen inferior: 

 

Creamos nuestra "arma" con un cubo escalado:


Lo asignamos como hijo de la cámara:


 De la misma manera crearemos una bala a nuestro antojo con la forma que queramos.
Importante!
En la parte del inspector crearemos una carpeta llamada Prefabs y otra dentro llamada Resources.
En su interior pondremos el prefab de la bala.


CÓDIGOOOO!!!!!! 

Tendremos 3 scripts para esta fase:

1.Arma
Desde esta script vamos a instanciar la bala, obviamente, dicha script la tiene el arma que hemos creado.
Como podemos ver, en la función Update () e puesto la condición "Cada vez que pulsemos el botón del ratón número 0", eso es el botón izquierdo.

Entonces, creará una bala, la sintaxis para hacer una instancia, suele ser de esta forma, de ahí que hayamos tenido que crear una carpeta con el nombre Resources.

Por encima, estamos diciendo que la variable de tipo GameObject, tiene el valor siguiente: como objeto, el que tenga el nombre "Bala" en la carpeta Resources, en la posición donde estamos mirando nosotros ahora mismo y con la rotación de la cámara.
Por ahora es todo lo que hace el arma.

2.Bala
Esta script tiene algo más de letra pero no es nada compleja:
Como veis he creado dos variables de tipo float una para el tiempo que va a estar la bala en activo y la otra  a la velocidad que va dicha bala.

Acto seguido ponemos que se traslade en la posición que le decimos. (Para ver el artículo donde se explica el movimiento: aquí).

Hago un pequeño paréntesis para explicar que nosotros podemos crear cualquier función con casi cualquier nombre, es mucho más ordenado tener varias funciones que se ejecuten en el Update que no todo el código ahí embutido.

Así como podéis ver, he creado la función "DestruirBala" y para llamarla en el Update ya veis que es muy  sencillo, solo teneis que poner el nombre y ();
Esta función lo que hace es destruir la bala (el nombre lo dice todo xD) pasados X segundos, que nosotros le damos en la variable antes creada.

Para acabar si colisiona contra el objeto que tiene el Tag == Diana, también se destruye.
 (Para ver el artículo relacionado con las colisiones y los Tag: Aquí).



3.Diana, la que ya teniamos anteriormente, como pruebaDisparoConBool que retocaremos.

Y por último, ya que no me da mucho tiempo a más, retocamos la script del artículo anterior, SIEMPRE SE RETOCAN, se quiera o no, se acaban haciendo cambios, así que si es alguien al que no le gusta retocar o se queja por nada...PUES VAYA A YOUTUBE A VER SI LES CONTESTAN!! dicho con cariño :D
Nah lo cierto es que a veces puede llegar a ser muy molesto no tener nada cuadrado hasta el final del proyecto por eso es mejor que avise desde ya.

Dicho esto, como podemos ver lo que hice fue crear una función nueva llamada "Disparo ()" y copié tal cual el código que teniamos en el Update (), así está más organizado.
Acto seguido hice la función de collider, así si leemos un poco el código podemos ver que:
"cuando collisiona con un objeto con el tag == "Bala" se activa el booleano que desencadena la condición dentro de la función Disparo (); para activar la animación.

Intentar comprender como funciona y probarlo! a mi me funciona así que no debería haber problemas si se sigue paso a paso.
Pero como siempre, cualquier duda se puede poner en un comentario, facebook o twitter.

La semana que viene el cronómetro o la puntuación, ya veré según me levante!

Artículo de Programación Anterior                       Siguiente

No hay comentarios:

Publicar un comentario