jairogarcíarincón
05/09/2022
Contenidos
Introducción
En esta receta vamos a utilizar el escenario y la interfaz de usuario de la receta 4 para añadir una serie de elementos coleccionables (monedas) que incrementarán el contador del jugador.
Además, añadiremos ciertos premios que permitirán, por ejemplo, incrementar la potencia de salto o ganar una vida.
Puedes comprobar el objetivo final haciendo clic AQUÍ.
Las monedas coleccionables
Con todo lo anterior, lo único que necesita nuestro escenario es añadir una serie de elementos para recoger.
Empezaremos por crear una moneda como modelo o Prefab. Para ello, creamos un Empty Object llamado Monedas y dentro un 3D > Cylinder llamado Moneda al que daremos forma de moneda, así como un material amarillo de efecto dorado.
Recuerda resetear la posición de Monedas y luego coloca la Moneda encima de la plataforma fija (roja).
Además, vamos a añadir este pequeño script a la moneda llamado Moneda para que esté constantemente girando sobre si misma:
Con esto ya tendríamos nuestra Moneda modelo, si bien como pondremos muchas y no queremos que el motor de Unity tenga que estar procesando y cacheando las rotaciones constantemente, es recomendable añadirle un Rigidbody con la propiedad Is Kinematic activada y la propiedad Use Gravity desactivada.
Además, vamos a marcar la propiedad Is Trigger de la componente Capsule Collider de la Moneda, y vamos a crear y aplicar una etiqueta o tag llamada Moneda a dicha Moneda.
El aspecto debería ser similar a este:
Para finalizar de crear nuestro modelo, crea una carpeta llamada Prefabs dentro de Assets y arrastra la Moneda a dicha carpeta. Desde ese momento, todas las monedas que creemos a partir de dicho Prefab (arrastrando a la Hierarchy window o a la Scene window) contendrán todas las propiedades y componentes de su Prefab, además de que si en algún momento modificamos dicho Prefab, las modificaciones afectarán a todos los elementos creados anteriormente a partir de él.
Una vez hecho esto, es el momento de crear en tu escenario tantas monedas como quieras (a partir del Prefab). La cantidad no importa, pero debes saber el número exacto de monedas que creas para luego poder contabilizarlas. En mi caso, tengo 20 monedas y he modificado la posición de la cámara para que puedas verlas todas:
Contabilizar las monedas y comprobar si he terminado
Para recoger las monedas debemos generar la lógica necesaria que las contabilice y las muestre en pantalla. Además, debemos comprobar si ha recogido todas las monedas para indicar mediante un mensaje que ha completado el juego.
Existen dos maneras de llevar el contador de monedas:
- de forma incremental: el contador inicial está a 0 y va sumando monedas.
- de forma decremental: el contador inicial muestra la cantidad de monedas a recoger y va decreciendo a medida que las recogemos hasta llegar a 0.
A mi particularmente me parece más intuitiva la manera decremental y es la que voy a implementar aquí, pero si quieres hacerlo de la otra forma sería cuestión de cambiar un par de líneas de código.
Puesto que las monedas las recoge el jugador y en desarrollo de videojuegos tendemos a aplicar la lógica de la programación a los elementos que provocan dicha lógica, el código necesario para contabilizar las monedas y comprobar si he terminado lo añadiremos al script JugadorController, haciendo de nuevo referencia a las variables del GameManager:
Recuerda asociar el objeto Texto Monedas con sus variables correspondientes en Jugador Controller.
Incrementar la potencia de salto durante un tiempo determinado
Una vez entendida la lógica de recolección de monedas, vamos a plantearnos crear 3 powerups en las 3 esquinas desocupadas de nuestro juego que nos permitan incrementar la potencia de salto durante 10 segundos. Además, durante ese tiempo el jugador tendrá un efecto alrededor para indicarlo.
- Crear un Empty Object llamado Capsulas y dentro de él una cápsula mediante 3D Object > Capsule llamada Capsula
- Crea un nuevo material de color naranja y aplícaselo a Capsula
- Crea una etiqueta o tag llamada Capsula y asígnala a la Capsula.
- Marca la propiedad Is Trigger de su Capsule Collider
Para terminar, vamos a aplicar a la Capsula un efecto de cambio de color progresivo de naranja a fucsia creando y asociándole un nuevo script ColorMaterial con el siguiente código:
Una vez hecho esto, arrastra Capsula a la carpeta Prefabs y crea otras dos cápsulas a partir de su prefab en las esquinas vacías del Suelo.
El resultado podría ser similar a este:
Y ahora, de igual manera que hicimos con las monedas, vamos a modificar JugadorController de modo que compruebe si ha colisionado con un objeto cuyo tag sea Capsula. Si es así, debemos iniciar un contador de 10 segundos durante el cual la potencia de salto se verá modificada. El código de JugadorController modificado sería como sigue:
No obstante, habíamos dicho que mientras durara la potencia de salto, le íbamos a aplicar a la bola un efecto. Para ello vamos a hacer uso del sistema de partículas de Unity o Particle System. Añade a Jugador un objeto Effects > Particle System y en la Inspector Window de ese objeto realiza los siguientes cambios:
- Duration: 1.00
- Start Color: Naranja
- Simulation Space: World
- Max particles: 100
- Shape > Shape: Sphere
Esto es solo un ejemplo, trastea con las diferentes opciones hasta buscar el efecto que te guste, el mío es más o menos así:
Ahora lo único que queda es modificar el JugadorController para que el sistema de partículas esté desactivado por defecto y solo se active mientras dure la potencia de salto extra:
Por supuesto, no olvides asociar el objeto Particle System a la variable Particulas.
Ganar una vida
Para terminar, vamos a añadir al juego la lógica necesaria para que si el jugador recoge las 10 primeras monedas en menos de 30 segundos le añada una vida adicional. Esto lo realizaremos de nuevo modificando el código de JugadorController, en el que recuperaremos la variable tiempo que lleva el tiempo transcurrido y si antes de que llegue a 30 segundos el contador de monedas es menor o igual que 10, añadiremos una vida al contador de vidas y mostraremos un mensaje temporal que lo indique:
Con esto estaría terminada la receta, espero que te haya resultado útil.
Publicado el 03 de Diciembre de 2024
unity