Zerbrechen
Lektion 6 von 16 im Kurs Unity-Spiel: Brick Breaker von Coddy.
Die Ziegel haben kein Rigidbody, aber der Ball hat eines, und Unity sendet bei einer Kollision an beide Objekte OnCollisionEnter. Ein Ziegel kann den Treffer also selbst bemerken. Im Skript des Ziegels ist gameObject der Ziegel und collision.gameObject das Objekt, das ihn getroffen hat.
Der Punktestand gehört zum GameManager, und Ziegel sind Kopien eines Prefabs. Ein Prefab ist ein Asset außerhalb der Szene, daher können seine Felder im Inspector nicht auf den GameManager der Szene verweisen. Der GameManager weist sich selbst in Awake() dem statischen GameManager.Instance zu, sodass jedes Skript darauf zugreifen kann, auch Prefab-Kopien.
Eine Vase, die zerbricht, wenn der Spieler in sie hineinläuft:
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player")) Shatter();
}
public void Shatter()
{
Destroy(gameObject);
}Destroy(gameObject) entfernt die Vase. Destroy(collision.gameObject) würde den Spieler entfernen, und Destroy(this) entfernt nur das Skript, sodass die Vase stehen bleibt. Wenn das Zerbrechen in einer eigenen öffentlichen Methode bleibt, kann auch anderer Code, etwa eine Bombe oder ein Power-up, die Vase zerbrechen.
Aufgabe
Mittel- Füge in
GameManagereinint scoreundpublic void BrickBroken(Brick brick)hinzu, wodurch diepointsdes Ziegelsteins zuscoreaddiert werden. - Schreibe in
Brickpublic void Hit(): Die Methode teiltGameManager.Instancemit, dass dieser Ziegelstein zerstört wurde, und zerstört ihn anschließend. - Füge
OnCollisionEnterzuBrickhinzu: Wenn das mitBallmarkierte Objekt den Ziegelstein trifft, rufeHit()auf.
Drücke Play, zerstöre ein paar Ziegelsteine und klicke dann auf Check.
Probier es selbst
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// Als Nächstes: Der Ball zerstört einen Ziegelstein und erzielt die entsprechenden Punkte.
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.