Menu
CoddyTech

Ladrillos resistentes

Lección 7 de 19 del curso Juego en Unity: Rompe ladrillos 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

Los ladrillos de la fila superior requieren dos golpes.

  1. En Brick, añade public int hits = 1;, public Color[] colors; (la escena establece los colores azul, naranja y rojo) y SetHits(int count): establece los golpes restantes y el color colors[hits - 1].
  2. Hit() resta uno a los golpes restantes: cuando llegan a 0, el ladrillo se rompe y suma puntos; de lo contrario, muestra el nuevo color.
  3. En GameManager, añade public int[] rowHits = { 2, 1, 1, 1, 1 }; y llama a brick.SetHits(rowHits[row]) para cada ladrillo nuevo.

Pulsa «Jugar»: la fila superior es naranja y se vuelve azul al recibir un golpe. Después, pulsa «Comprobar».

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);
    }
}

Todas las lecciones de Juego en Unity: Rompe ladrillos

Practica por tu cuenta: Playground de Unity