Harte Ziegel
Lektion 7 von 19 im Kurs Unity-Spiel: Brick Breaker von Coddy.
Manche Blöcke benötigen mehr als einen Treffer. Jeder Block speichert, wie viele Treffer er noch aushält: Ein Treffer zieht eins davon ab, und erst der Treffer, der den Wert auf 0 bringt, zerstört den Block und bringt Punkte. Bis dahin ändert der Block seine Farbe, damit der Spieler sehen kann, wie widerstandsfähig er noch ist.
Ein im Inspector ausgefülltes Farbarray ordnet der Anzahl eine Farbe zu. Element 0 ist die Farbe für einen verbleibenden Treffer, Element 1 für zwei, also ist die Farbe für eine Anzahl von n Element n - 1. Ein Schild mit Ladungen funktioniert genauso:
public Color[] chargeColors; // Element 0: 1 Ladung übrig
void ShowCharges(int charges)
{
GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}Beim ersten Auslesen von material erhält dieser Renderer eine eigene Kopie des Materials, sodass ein Schild oder ein Block seine Farbe ändern kann, ohne jede Kopie des Prefabs neu einzufärben. Der GameManager legt fest, wie widerstandsfähig jeder neue Block ist: Ein int[] mit einer Zahl pro Reihe, beginnend mit der obersten Reihe, sorgt dafür, dass die oberste Reihe mehr Treffer aushält als die übrigen.
Aufgabe
MittelDie Steine in der obersten Reihe benötigen zwei Treffer.
- Füge in
Brickpublic int hits = 1;,public Color[] colors;(die Szene legt Blau, Orange und Rot fest) undSetHits(int count)hinzu: Setze die Trefferanzahl und die Farbecolors[hits - 1]. Hit()zieht einen Treffer von der Trefferanzahl ab: Bei 0 zerbricht der Stein und gibt Punkte, andernfalls zeigt er die neue Farbe.- Füge in
GameManagerpublic int[] rowHits = { 2, 1, 1, 1, 1 };hinzu und rufe bei jedem neuen Steinbrick.SetHits(rowHits[row])auf.
Drücke „Spielen“: Die oberste Reihe ist orange und wird beim Treffer blau. Drücke dann „Prüfen“.
Probier es selbst
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);
}
}
Alle Lektionen in Unity-Spiel: Brick Breaker
Übe selbstständig: Unity-Playground