Menu
CoddyTech

Mattoni resistenti

Lezione 7 di 16 del corso Gioco Unity: Rompi-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
  1. In Brick, aggiungi public int hits = 1 e public Color[] colors. La scena riempie colors con blu, arancione e rosso, per 1, 2 e 3 colpi rimanenti.
  2. Scrivi public void SetHits(int count): imposta hits e mostra il colore del mattone corrispondente.
  3. Modifica Hit(): sottrai uno da hits. A 0 il mattone si rompe e assegna punti come prima; altrimenti mostra solo il suo nuovo colore.
  4. In GameManager, aggiungi public int[] rowHits = { 2, 1, 1, 1, 1 }; e assegna a ogni nuovo mattone rowHits[row] colpi tramite SetHits.

Premi Play, indebolisci un mattone arancione nella fila superiore, poi premi Check.

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);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: Rompi-mattoni