Menu
CoddyTech

Die Mauer

Lektion 5 von 16 im Kurs Unity-Spiel: Brick Breaker von Coddy.

Die Ziegel stehen in einem Raster: Die Reihen verlaufen von oben nach unten, die Spalten von links nach rechts. Jeder Ziegel ist eine Kopie eines Ziegel-Prefabs, die in zwei verschachtelten Schleifen erstellt wird. Die Position eines Ziegels ergibt sich aus seinen Reihen- und Spaltennummern multipliziert mit dem Abstand zwischen den Ziegelmittelpunkten. Dieser Abstand entspricht der Größe eines Ziegels plus einem kleinen Zwischenraum.

Um ein Raster auf x = 0 zu zentrieren, berechnest du, wo die erste Spalte liegt. Zwischen n Spalten gibt es n minus 1 Zwischenräume. Bei einem Abstand von s liegen die äußeren Mittelpunkte also (n - 1) * s auseinander, und der erste liegt um die Hälfte davon links. Fünf Zaunpfosten im Abstand von 2 Einheiten:

int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
    Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}

Sie stehen bei -4, -2, 0, 2 und 4: Der erste Pfosten steht bei -4, nicht bei -5, denn zwischen fünf Pfosten liegen vier Zwischenräume. Das vierte Argument von Instantiate, ein übergeordnetes Transform, ordnet jede Kopie einem Objekt unter, damit die Hierarchy übersichtlich bleibt. Wenn der Typ des Prefab-Felds ein Skript ist, zum Beispiel Brick, gibt Instantiate das Skript der neuen Kopie zurück, sodass du es direkt verwenden kannst.

challenge icon

Aufgabe

Mittel

Baue die Mauer in GameManager:

  1. Füge public Brick brickPrefab und public Transform wall hinzu (in der Szene werden das Brick-Prefab und das Wall-Objekt verknüpft), sowie public int rows = 5, public int columns = 9, public float spacingX = 1.75f, public float spacingY = 0.75f und public float topY = 6f.
  2. Schreibe void BuildWall(): einen Brick für jede Zeile und jede Spalte, der zum Kindobjekt von wall wird. Zeile 0 befindet sich bei y = topY und jede Zeile darunter ist um spacingY niedriger. Die Spalten liegen jeweils um spacingX auseinander und sind auf x = 0 zentriert. Die Bricks befinden sich bei z = 0.
  3. Rufe BuildWall() von Start() aus auf.

Drücke Play und lass den Ball von der Mauer abprallen (die Bricks zerbrechen noch nicht), dann Check.

Probier es selbst

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    void Awake()
    {
        Instance = this;
    }

    // Später: die Ziegelmauer, der Punktestand, die Leben und die Level.
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unity-Spiel: Brick Breaker