Durchbruch
Lektion 6 von 19 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
MittelDer Ball zerstört Ziegel und erhöht den Punktestand um deren Punkte.
- Füge in
GameManagerint score;undpublic void BrickBroken(Brick brick)hinzu, wodurchbrick.pointszum Punktestand addiert wird. - Schreibe in
Brickpublic void Hit():GameManager.Instance.BrickBroken(this);, dannDestroy(gameObject); - Rufe in
OnCollisionEntervon BrickHit()auf, wenn das Objekt mitBallgetaggt ist.
Drücke „Spielen“ und starte den Ball: Jeder Ziegel, den der Ball trifft, verschwindet. Drücke anschließend „Prüfen“.
Probier es selbst
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// Als Nächstes: Der Ball zerstört einen Stein und erhält dessen Punkte.
}
Alle Lektionen in Unity-Spiel: Brick Breaker
Übe selbstständig: Unity-Playground