Ladrillos resistentes
Lección 7 de 16 del curso Juego en Unity: Rompebloques de Coddy.
Algunos ladrillos necesitan más de un golpe. Cada ladrillo lleva la cuenta de los golpes que le quedan: un golpe resta uno, y solo el golpe que la reduce a 0 rompe el ladrillo y suma puntos. Hasta entonces, el ladrillo cambia de color para que el jugador pueda ver lo resistente que sigue siendo.
Una matriz de colores rellenada en el Inspector asigna un color a cada cantidad de golpes. El elemento 0 es el color cuando queda un golpe, el elemento 1 cuando quedan dos, así que el color para una cantidad n es el elemento n - 1. Un escudo con cargas funciona igual:
public Color[] chargeColors; // elemento 0: queda 1 carga
void ShowCharges(int charges)
{
GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}La primera vez que se lee material, se obtiene una copia propia del material para este renderizador, así que un escudo o un ladrillo cambia de color sin volver a pintar cada copia del prefab. GameManager decide cuánta resistencia tiene cada ladrillo nuevo: un int[] con un número por fila, empezando por la fila superior, permite que la fila superior reciba más golpes que las demás.
Desafío
Intermedio- En
Brick, añadepublic int hits = 1ypublic Color[] colors. La escena asigna acolorslos colores azul, naranja y rojo, para 1, 2 y 3 impactos restantes. - Escribe
public void SetHits(int count): establecehitsy muestra el color del bloque correspondiente. - Cambia
Hit(): resta uno ahits. Cuando llega a 0, el bloque se rompe y suma puntos como antes; de lo contrario, solo muestra su nuevo color. - En
GameManager, añadepublic int[] rowHits = { 2, 1, 1, 1, 1 };y asigna a cada bloque nuevorowHits[row]impactos conSetHits.
Pulsa Play, desgasta un bloque naranja de la fila superior y, después, pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Ball")) Hit();
}
public void Hit()
{
GameManager.Instance.BrickBroken(this);
Destroy(gameObject);
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.