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.
Sfida
MedioLa palla rompe i mattoni e fa guadagnare i relativi punti.
- In
GameManager, aggiungiint score;epublic void BrickBroken(Brick brick), che aggiungebrick.pointsal punteggio. - In
Brick, scrivipublic void Hit():GameManager.Instance.BrickBroken(this);, poiDestroy(gameObject); - In
OnCollisionEnterdi Brick, chiamaHit()quando l'oggetto ha il tagBall.
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