El escenario en un juego lo es casi todo, una ambientación u otra puede cambiar totalmente lo que el usuario siente al jugar. Ha llegado el momento de darle un poco de ambientación a nuestro juego, así que vamos a crear un escenario y a hacer que nuestro Player muera, o se destruya al caer al vació.
Este post forma parte del tutorial de desarrollo de juegos en Unity. En los post anteriores hemos creado la base del juego, con sus premios, enemigos y configurado el sonido y las explosiones. Si quiere empezar desde aquí puedes bajarte el fichero con el proyecto Unity con todas las modificaciones que hemos hecho por ahora: megafastball-conexplosiones.
Creando un Skybox.
¿Os acordáis de lo que es un skybox? Lo vimos en el post: Creación de nuestra primera aplicación en Unity! En el creábamos un skybox que simulaba ser el espacio, el escenario ideal para nuestros planetas. Pues bien podemos aprovecharlo tal cual.
Tenemos dos opciones: Copiarlo de nuestro anterior proyecto, no tenemos ni que abrirlo, tan solo ir al directorio donde están los ficheros del proyecto y arrastrar el skybox a nuestra sección Project.
Crearlo de nuevo, repitiendo los pasos, para ello necesitaremos la imagen, que o bien la copiamos del proyecto anterior, o nos la bajamos de este link: imagen del espacio.
La creación del nuevo material la hacemos desde el menú create de la sección project y escogemos: new material. Con lo que crearemos el material que transformaremos en skybox.
Cambiamos el shader a tipo skybox 6 sided.
Ahora la sección inspector cambia y nos pide seis imágenes, en las seis ponemos nuestra imagen del espacio. Podemos hacerlo pulsando el botón select o arrastrando la imagen a los seis espacios reservados para tal fin.
Incluimos el skybox a nuestra scene con:
Vamos al menu Window -> Lighting -> Settings.
Se nos mostrará un cuadro de dialogo, en la pestaña Scene, en el que vemos el campo Skybox Material.
Pulsamos sobre el punto que tiene a su derecha y nos permitirá seleccionar el skybox que queremos usar, tenemos que indicarle el que acabamos de crear. En la imagen se puede ver que yo lo he llamado skybox y… tachan! Aparece nuestro espacio profundo en las secciones de Scene y Game.
Esto va mejorando, he realizado algún cambio más, como reducir el tamaño de la plataforma. Vamos a darle un toque a intentar mejorarlo aún mas, cambiando el color de la plataforma, y haciendo que el player se destruya cuando caiga de esta.
Cambiando los colores del juego.
Todos tenemos nuestros gustos, que pueden coincidir o no con los de la mayoría, por eso la combinación de colores que he escogido Yo, pude horrorizar a mucha gente. Lo importante aquí no son los colores, lo importante es saber que elementos se pueden modificar para variar la apariencia de nuestro juego.
He intentado dar con una combinación de colores que recuerden a los arcades de los 80 y que no dificulten demasiado la visualización de todos los elementos del juego. Posiblemente no sean los definitivos, igual que la posición de la cámara, pero estas modificaciones se pueden ir haciendo a medida que se avanza con el juego, ya que al modificar los Prefab se modifican todos los objetos del juego que los usan, por lo que no importa cuantos elementos tengamos.
Los objetos que podemos modificar son:
- Los materiales: Podemos modificar el Material de Obstaculos, el MaterialEnemigo, el de las monedas, en todos ellos podemos modificar el Albedo para cambiar de color y jugar con las opciones para ver como afecta a la visualización de los elementos construidos con esos materiales.
- El Prefab Enemigo: Este Prefab usa el Material MaterialEnemigo, pero también podemos realizar diferentes cambios en sus propiedades. Como en el shader, que lo he dejado así:
- El Prefab Suelo: Igual que con el otro Prefab, hemos jugado con el material que usa, que lo hemos cambiado a NavyGrid, y con las opciones Shader de este material.
No tengáis miedo, guardad el proyecto y modificad todo lo que queráis de estos elementos, si no os convence el resultado no volváis a guardar. Lo importante es que modifiquéis todo lo que queráis y veáis como afecta a la apariencia del juego. Buscad una combinación de colores y texturas que os convenza, una buena idea puede ser jugar con diferentes azules, para que parezca un bloque de hielo flotando en el espacio.
Eliminando al Player cuando sale del escenario.
Cuando perdemos el control de la Bola y esta se cae de nuestra plataforma, inicia una caída al vacío infinita. Esta claro que esto no puede quedarse así, esta bola tiene que desaparecer. Hay varias formas de hacerlo, pero quizá la mas sencilla y rápida sea situar un suelo debajo de nuestra plataforma que haga explotar al player cuando toque con este segundo suelo. Pero hay un problema, no queremos que el usuario vea el segundo suelo, por lo que tendremos que crear un objeto invisible en Unity pero con el que se pueda colisionar. Los pasos son muy sencillos:
- Crear un objeto vacío.
- Redimensionarlo y colocarlo debajo de nuestra plataforma. El objeto tiene que ser lo suficiente grande para la bola siempre coque con el.
- Añadirle un Collider para que la bola pueda colisionar con el.
- Incorporar un script que elimine la bola al colisionar con el.
Para crear el objeto vacío en el menu Create de la sección Hierarchy escogemos create empty. Nos creará un objeto vacío, que yo he llamado segundo suelo. Ahora tenemos moverlo por la escena y darle un buen tamaño, para asegurarnos que la bola siempre caiga en el.
La silueta verde representa los márgenes de nuestro segundo suele, esta un poco alejado de la plataforma, para que el usuario tenga la sensación de que la Bola se ha alejado, y al mismo tiempo tiene un tamaño considerable, para asegurar que la Bola no cae nunca fuera de sus márgenes.
En la sección Inspector del nuevo elemento, y mediante el botón Add Component, añadimos un Collider, lo encontramos en Physics->Box Collider. Este elemento es el que permite detectar colisiones con el objeto.
El último paso es crear un script que elimine al PLayer… bueno, la verdad es que no hace falta, el script ya lo tenemos, es el mismo que el que usa el enemigo, así que tan solo tenemos que incorporar el script damage, mediante el botón Add Component y ya lo tenemos. Este script lo creamos en el post Premios y enemigos en Unity.
using UnityEngine; using System.Collections; public class Damage : MonoBehaviour { //public GameObject explosionPlayer; void OnCollisionEnter(Collision other) { //Si chocamos con un Player lo eliminamos a el. if (other.gameObject.tag == "Player") { //if (explosionPlayer!=null) { // Instantiate (explosionPlayer, other.gameObject.transform); //} Destroy (other.gameObject); } //Si chocamos con otro enemigo nos eliminanos a nosotros mismos. if (other.gameObject.tag == "Enemy") { Destroy (gameObject); } } }
El script tiene un poco mas de código del necesario, pero es lo que pasa con los scripts que se reutilizan, y seguramente podríamos optimizarlo, porque hay un problema potencial. Si cae un cubo antes que el Player nuestro segundo suelo desaparece. Ya lo solucionaremos mas adelante.
Como podéis ver al final he decidido poner los colores azules 🙂
El juego va tomando forma, en el siguiente post veremos como crear un Contador en Unity que nos permita tener una puntuación.
En unos días: Creando un Contador para Unity.
En este enlace podéis encontrar el proyecto con todas las modificaciones realizadas. MegafastBall de colores y con segundo suelo.