Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
Pasos en la realización de juego fall down con Unity 3D
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
- Añadimos el sprite de un misil a la pantalla.
- 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:
while(premium == false) verCodigo = false;
Para poder ver el código fuente, accede o suscríbete.
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");
Detener la caída por gravedad del objeto
GetComponent<Rigidbody2D>().simulated = false;
Destruir objeto cuando la animación ha terminado
while(premium == false) verCodigo = false;
Para poder ver el código fuente, accede o suscríbete.
Creamos y usamos un prefab
¿Qué es un prefab?
Un prefab es un GameObject que puede agrupar a su vez varios GameObjects, Scripts, assets, etc y que está empaquetado y prepararado para ser reusado.
Técnicamente, un prefab debe ser un único objeto, por lo que si quisieramos que el prefab constase de varios objetos, deberíamos agruparlos en un empty.
Para crear el prefab, lo arrastraremos del panel de jerarquía, donde lo hemos estado elaborando, hasta el panel de proyecto.
Si tengo varias instancias de un prefab y modifico una de ellas, pulsando el botón apply en el panel inspector, estas modificaciones se aplicarán al resto de prefabs. Si no pulso aplicar, la modificación será únicamente para ese prefab.
Crearemos un prefab arrastrando el objeto deseado desde el panel de jerarquía hasta el panel de proyecto.
Cómo instanciar un Prefab
Crear una propiedad pública de tipo GameObject en un script vinculado a un objeto y arrastrar el prefab desde el panel de proyecto al panel de jerarquí en el que se encuentra dicha propiedad. GameObject nuevoMisil = Instantiate(misilPr4efab, new Vector2(0,0), Quaternion.identity);
Instantiate(misilPrefab, Vector2.zero, Quaternion.identity);
Continuamos con lo que estabamos haciendo
A partir del misil con el que hemos estado trabajando, creamos un prefab.
Creamos un objeto de tipo Empty al que vinculamos un script llamado GameManager. Este script tendrá un GameObject público al que vincularemos el prefab del misil.
Instanciar un misil
while(premium == false) verCodigo = false;
Para poder ver el código fuente, accede o suscríbete.
Instanciar un misil en una posición horizontal aleatoria
while(premium == false) verCodigo = false;
Para poder ver el código fuente, accede o suscríbete.
Generar un misil cada segundo
Usaremos una corrutina para ello. Dentro de la corrutina iremos instanciando los misiles.
Detectar colisiones
Diferencia entre marcar o no marcar la check isTrigger de un BoxCollider.
- Cuando la check está marcada, los objetos que colisionan se superponen durante la colisión, pasando uno por encima de otro. El código que usamos para gestionar estas colisiones es similar a este:
void OnTriggerEnter2D(Collider2D col){
}
- Cuando la check no está marcada, los objetos que colisionan impactan entre sí.
void OnCollisionEnter2D(Collision2D col){
}
El jugador perderá cuando un misil desaparezca por la parte inferior de la pantalla.
Para detectar esto:
- Ponemos un cubo en la parte inferior de la pantalla y lo estiramos para que ocupe toda su longitud.
- 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.
- En el componente Box Collider 2D del GameObject AreaInferior, activamos la check isTrigger.
- Vinculamos el siguiente Script al cubo inferior
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.
while(premium == false) verCodigo = false;
Para poder ver el código fuente, accede o suscríbete.
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");