Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio
  1. En Brick, añade public int hits = 1 y public Color[] colors. La escena asigna a colors los colores azul, naranja y rojo, para 1, 2 y 3 impactos restantes.
  2. Escribe public void SetHits(int count): establece hits y muestra el color del bloque correspondiente.
  3. Cambia Hit(): resta uno a hits. Cuando llega a 0, el bloque se rompe y suma puntos como antes; de lo contrario, solo muestra su nuevo color.
  4. En GameManager, añade public int[] rowHits = { 2, 1, 1, 1, 1 }; y asigna a cada bloque nuevo rowHits[row] impactos con SetHits.

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);
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego en Unity: Rompebloques