lunes, 28 de agosto de 2017

Tutorial de plataformas 2D en Unity (X)








13.       Implementando vidas:




Repetimos el proceso anterior con la puntuación, creando los textos necesarios en nuestro Canvas.

Cuando los tengamos, vamos a nuestro script “Puntuacion” y añadimos lo siguiente:




 



Como veis es el mismo proceso que hicimos con las monedas, la única diferencia es:


  if (puntuacion > 99)
        {
            puntuacion = 0;
            Vidas = Vidas + 1;
     GetComponent<AudioSource>().Play();
            ActualizaMarcador();      
 }


Que lo que va a hacer es, cuando el número de monedas llegue a 100, sume 1 vida y reinicie el número. Luego reproducirá el sonido que agreguemos al componente “AudioSource” del objeto que tenga asignado este script y por último actualice el marcador.

Ahora vamos a tener que importar la librería UnityEngine.SceneManagement;


 



Ahora declaramos una serie de nuevas variables:

    public Transform CheckPoint;
    public GameObject Personaje;
    public GameObject CompruebaMuerte;
    public GameObject Persistente;

“CheckPoint” será el punto donde empecemos cuando nos maten.

“Personaje” será nuestro personaje.

CompruebaMuerte” será un objeto vacío que estará desactivado y que cuando nos maten se activará.

“Persistente” es el objeto que contiene el “Canvas” con la puntuación.



Una vez declaradas nuestras variables vamos a Unity a asignar los componentes:

Antes de nada, creamos un “GameObject” vacío que llamaremos “Inicio” (será nuestro checkpoint) y lo colocamos en la posición donde queramos que el personaje aparezca cuando nos maten. Luego le cambiamos el icono para que sea más fácil reconocerlo de los demás.



 


Luego buscamos en “Hierarchy” nuestro “Canvas” y le asignamos los componentes al script, al final debe quedar como en la siguiente imagen:



 



Cuando lo tengamos hecho, creamos un script que llamaremos “Muerte”:



 



Declaramos cuatro variables públicas, y escribimos la siguiente función:


private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {         
            Animador.SetBool("Muerte", true);
            Personaje.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, Altura));
            CompruebaMuerte.SetActive(true);
            GetComponent<AudioSource>().Play();
            Personaje.GetComponent<CapsuleCollider2D>().enabled = false;        }
       
        }


Lo que hará la función es desactivar el objeto “Personaje” y activar el objeto “CompruebaMuerte” en el momento en el que un objeto con el tag “Player” colisione contra el objeto que tenga asignado este script. Al mismo tiempo activa el booleano llamado “Muerte” en el Animator, reproduce un sonido que asignemos a este objeto en un “AudioSource” (el sonido que queramos que suene cuando nos maten), luego le añade una fuerza en el eje “Y” que tendrá el valor “Altura” (esto hace que cuando nos maten el personaje salga disparado hacia arriba como hacía en el juego Super Mario Bros) y le desactiva el collider (para que cuando caiga atraviese los objetos que haya en la pantalla).

Cuando lo tengamos, volvemos a Unity y hacemos clic derecho sobre “Main Camera” y creamos un objeto vacío que sea hijo de la cámara al que llamaremos “Muerte” y al que asignaremos el tag “Finish”.

Lo colocamos bajo la escena en una posición centrada. Luego le añadimos un “Box Collider 2D” y activamos la función “Is Trigger”, después escalamos el “collider” hasta que tenga el ancho de la pantalla y por último le asignamos nuestro script “Muerte” y le asignamos los objetos correspondientes.







Al haber metido este objeto dentro de “Main Camera” haremos que se mueva igual que la cámara, por lo que siempre permanecerá debajo de la escena, independientemente de la posición del personaje.

Nos vamos al script “MovimientoEnemigo” y vamos a añadir las siguientes líneas en la función “OnTriggerEnter2D” para que se destruya cuando caiga al vacío.






Ahora dentro de nuestro objeto “Muerte” crearemos un objeto vacío que llamaremos “CompruebaMuerte”, una vez creado lo desactivamos en el “Inspector”.

Vamos a programar ahora todos los comportamientos para que cuando muera el personaje, reaparezca con una vida menos. Por lo que necesitamos abrir nuestro script “Puntuacion” y escribir lo siguiente en la función “Update”.







if (Detector.activeInHierarchy)
        {
            Personaje.transform.position = CheckPoint.position;
            Personaje.SetActive(true);
            CompruebaMuerte.SetActive(false);
            Vidas = Vidas - 1;
            ActualizaMarcador();
        }

Si “Detector” está activado en “Hierarchy” mueve el personaje a la posición donde se encuentre nuestro “Check Point”, luego activa el personaje en esa posición, desactiva “CompruebaMuerte”, resta una vida del total y actualiza el marcador de vidas del “Canvas”.

Es muy importante que vayáis siendo capaces de leer vosotros mismos los códigos poco a poco, de este modo, cuando queráis modificar un código que no habéis escrito vosotros, sabréis donde buscar.

Luego escribimos:


if (Vidas < 0)
        {
            Destroy(Persistente);
            SceneManager.LoadScene("Menú");
        }




Es decir, si vidas es menor que cero, destruye el persistente y carga la escena del menú principal.





Esto es todo por ahora, recordad que podéis preguntar cualquier duda tanto en los comentarios, como en Twitter: @Lepra_Games o en la página de Facebook: Lepra Games.

No hay comentarios:

Publicar un comentario