Fall Down en Unity3D

Curso de Unity 3D

21.  
40.  

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Historia de Flappy Bird

¿Conoces el mítico juego del Flappy Bird?. Fue un juego hecho para dispositivos móviles creado en 2013 por el desarrollador vietnamita Dong Nguyen. El juego se volvió extremadamente popular en 2014, y llegó a tener más de 50 millones de descargas. Ese mismo año, su programador decidió retirarlo del mercado alegando que el juego había adquirido «demasiada atención». No obstante, a día de hoy existe infinidad de clónicos. Nosotros vamos a desarrollar nuestra propia versión del Flappy Bird.

A continuación tienes los pasos que irémos dando.

Ponemos el fondo de pantalla

El primer paso de este y otros muchos juegos será poner una imagen de fndo en pantalla. En el juego que nos ocupa será la imagen del espacio, por el que irá flotando nuestro protagonista.

Un misil cae por gravedad

  1. Añadimos el sprite de un misil a la pantalla.
  2. Le añadimos al misil un componente de tipo RigidBody 2D.

Tipos de RigidBody

  • Dynamic: El cuerpo es afectado por las fuerzas que interactúan con él.
  • Kinematic: El cuerpo no es afectado por las fuerzas que interactúan con él.
  • Static: Ideal para plataformas estáticas.

Detectamos la pulsación sobre el misil

Recuerda como lo hiciste en el juego de Elige tu propia aventura:

using UnityEngine;

public class Nave : MonoBehaviour
{
    void OnMouseDown()
    {
        Debug.Log("Nave pulsada");
    }
}

Animación de explotar

Por defecto Unity reproduce las animaciones en bucle. Para evitar esto, selecciono la animación creada en el panel de proyecto y desmarco la check Loop Time.

Panel Animator

Este panel gestiona la vinculación entre las animaciones y los objetos.

Si un objeto tiene errores en su panel animator, no se reproducirán las animaciones asociadas a él.

Es posible unir las animaciones vinculadas a un objeto mediante flechas. A estas uniones las llamaremos transiciones.

Estado Entry
  • Entry es el punto de partida de la animación.
  • En muchos casos, el estado Entry va vinculado a un estado creado por nosotros llamado idle, que corresponde a una animación del objeto en reposo.
  • Obligatoriamente, el estado Entry debe estar unido con algún otro estado.
  • Cuando una animación llega al exit, regresa al estado Entry.

Detonar la animación mediante código:

GetComponent<Animator>().Play("Explosion");
panel animator unity 3d

Detener la caída por gravedad del objeto

GetComponent<Rigidbody2D>().simulated = false;

Destruir objeto cuando la animación ha terminado

print( GetComponent<Animator>().runtimeAnimatorController.animationClips[0].name);
float explosionTime = GetComponent<Animator>().runtimeAnimatorController.animationClips[0].length;

Destroy(gameObject, explosionTime );

Instanciar un misil en una posición horizontal aleatoria

float pos = Random.Range(Camera.main.ScreenToWorldPoint(Vector2.zero).x, Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, 0)).x);
GameObject nuevoMisil = Instantiate(misil, new Vector2(pos, Camera.main.ScreenToWorldPoint(new Vector2(0, Screen.height)).y), Quaternion.identity);

Generar un misil cada segundo

Usaremos una corrutina para ello. Dentro de la corrutina iremos instanciando los misiles.

Detectar colisiones

El jugador perderá cuando un misil desaparezca por la parte inferior de la pantalla.

Para detectar esto:

  1. Ponemos un cubo en la parte inferior de la pantalla y lo estiramos para que ocupe toda su longitud.
  2. Asignamos Box Collider 2D al cubo, en lugar del Box Collider que tenía. Para detectar la colisión entre dos entidades, estas deben tener el mismo tipo de Box Collider.
  3. En el componente Box Collider 2D del GameObject AreaInferior, activamos la check isTrigger.
  4. Vinculamos el siguiente Script al cubo inferior
Fall Down en Unity3D 1
public class LoserArea: MonoBehaviour{
	void OnTriggerEnter2D(Collider2D col){
		print("colision");
	}
}

Perder vidas

Cada vez que se produzca la colisión anterior, el usuario perderá una vida.

public class LoserArea: MonoBehaviour{
    int marker = 3;
    public Sprite blackHeart;
    void OnCollisionEnter2D(Collision2D col){
        marker--;

        if(marker == 2){
            GameObject.Find("Live3").GetComponent<SpriteRenderer>().sprite = blackHeart;
corazon negro

Perder el juego

Si el marcador de vidas llegase a cero, el jugador habrá perdido la partida y lanzaremos la escena correspondiente.

Te recuerdo el código para cambiar de escena que ya vimos en el juego de Elige tu propia aventura.

UnityEngine.SceneManagement.SceneManager.LoadScene ("GameOver");

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.