Menu
CoddyTech

Mattoni resistenti

Lezione 7 di 19 del corso Gioco in Unity: Rompi i mattoni di Coddy.

Alcuni mattoni richiedono più di un colpo. Ogni mattone tiene il conto dei colpi che gli restano: un colpo ne toglie uno e solo il colpo che lo porta a 0 rompe il mattone e assegna punti. Fino ad allora il mattone cambia colore, così il giocatore può vedere quanto è ancora resistente.

Un array di colori compilato nell'Inspector associa il conteggio a un colore. L'elemento 0 è il colore per un colpo rimasto, l'elemento 1 per due, quindi il colore per un conteggio di n è l'elemento n - 1. Uno scudo con cariche funziona allo stesso modo:

public Color[] chargeColors;   // elemento 0: 1 carica rimasta

void ShowCharges(int charges)
{
    GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}

La lettura di material fornisce a questo renderer una copia propria del materiale la prima volta, così uno scudo o un mattone cambia colore senza ridipingere ogni copia del prefab. GameManager decide quanto è resistente ogni nuovo mattone: un int[] con un numero per ogni riga, partendo da quella superiore, permette alla riga superiore di richiedere più colpi delle altre.

challenge icon

Sfida

Medio

I mattoni della riga superiore richiedono due colpi.

  1. In Brick, aggiungi public int hits = 1;, public Color[] colors; (la scena imposta i colori blu, arancione e rosso) e SetHits(int count): imposta il numero di colpi e il colore colors[hits - 1].
  2. Hit() sottrae un colpo: a 0 il mattone si rompe e assegna punti, altrimenti mostra il nuovo colore.
  3. In GameManager, aggiungi public int[] rowHits = { 2, 1, 1, 1, 1 }; e chiama brick.SetHits(rowHits[row]) per ogni nuovo mattone.

Premi «Gioca»: la riga superiore è arancione e diventa blu quando viene colpita. Poi premi «Verifica».

Provalo tu

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

Tutte le lezioni di Gioco in Unity: Rompi i mattoni

Esercitati da solo: Playground Unity