Menu
CoddyTech

Rompi

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

I mattoni non hanno un Rigidbody, ma la palla sì, e Unity invia OnCollisionEnter a entrambi gli oggetti coinvolti in una collisione. Quindi un mattone può accorgersi dell’urto da solo. Nello script del mattone, gameObject è il mattone e collision.gameObject è l’oggetto che lo ha colpito.

Il punteggio appartiene al GameManager e i mattoni sono copie di un prefab. Un prefab è una risorsa esterna alla scena, quindi i suoi campi non possono puntare al GameManager della scena nell’Inspector. Il GameManager assegna a se stesso GameManager.Instance statico in Awake(), così qualsiasi script può accedervi, comprese le copie dei prefab.

Un vaso che si rompe quando il giocatore ci finisce contro:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player")) Shatter();
}

public void Shatter()
{
    Destroy(gameObject);
}

Destroy(gameObject) rimuove il vaso. Destroy(collision.gameObject) rimuoverebbe il giocatore, mentre Destroy(this) rimuove solo lo script, lasciando il vaso al suo posto. Tenendo la rottura in un proprio metodo pubblico, anche altro codice, come una bomba o un potenziamento, può rompere il vaso.

challenge icon

Sfida

Medio

La palla rompe i mattoni e fa guadagnare i relativi punti.

  1. In GameManager, aggiungi int score; e public void BrickBroken(Brick brick), che aggiunge brick.points al punteggio.
  2. In Brick, scrivi public void Hit(): GameManager.Instance.BrickBroken(this);, poi Destroy(gameObject);
  3. In OnCollisionEnter di Brick, chiama Hit() quando l'oggetto ha il tag Ball.

Premi «Gioca» e lancia la palla: ogni mattone colpito dalla palla scompare. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    // Prossimo passo: la palla rompe un mattone e guadagna i punti corrispondenti.
}

Tutte le lezioni di Gioco in Unity: Rompi i mattoni

Esercitati da solo: Playground Unity