Menu
CoddyTech

Der Schläger

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

In diesem Kurs erstellst du Brick Breaker in 3D: einen Schläger unten, einen Ball, der zwischen den Wänden abprallt, und eine Wand aus Ziegeln, die es zu zerstören gilt. Jede Lektion fügt ein Feature hinzu: die Ziegel, Leben, Level, einen Game-over-Bildschirm und Power-ups, die den Schläger verbreitern oder den Ball teilen. Die Szene ist bereit: Die Kamera blickt von vorne auf das Spielfeld, und alles bewegt sich in der x-y-Ebene bei z = 0. Die Skripte Paddle, Ball, Brick, GameManager und PowerUp sind vorerst kurze Platzhalter.

Der Schläger hat einen kinematischen Rigidbody, der mit MovePosition in FixedUpdate bewegt wird, sodass die Physik seine Bewegung erfasst und der Ball später daran abprallen kann. Ein kinematischer Körper wird niemals von Collidern ohne Rigidbody gestoppt, deshalb halten ihn die Seitenwände nicht auf: Das Skript hält ihn innerhalb der Begrenzung. Würde man den Mittelpunkt an der Wand begrenzen, läge die Hälfte des Objekts innerhalb der Wand. Deshalb liegt die Grenze bei der Wand minus der halben Objektgröße. Dieser Aufzug in einem Schacht von y = 0 bis y = 12 setzt das auf der y-Achse um:

float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);

Hier ist input 1 für die Aufwärtsbewegung, -1 für die Abwärtsbewegung und ansonsten 0. Ein 2 Einheiten hoher Aufzug hält seinen Mittelpunkt zwischen 1 und 11, sodass seine Enden genau bei 0 und 12 stoppen. Ein Cube-Grundobjekt ist auf jeder Seite 1 Einheit groß, daher entspricht localScale.y der Höhe des Aufzugs. Wenn man sie bei jedem Schritt ausliest, bleibt die Grenze korrekt, falls sich die Größe während des Spiels ändert.

challenge icon

Aufgabe

Einfach

Schreibe die Bewegung des Schlägers in Paddles FixedUpdate():

  1. Erstelle ein float input: -1, solange die linke Pfeiltaste oder A gedrückt gehalten wird, 1, solange die rechte Pfeiltaste oder D gedrückt gehalten wird, andernfalls 0.
  2. Berechne das Ziel: die Position des Rigidbody, nach rechts verschoben um input * speed * Time.fixedDeltaTime.
  3. Begrenze den x-Wert des Ziels so, dass die Enden des Schlägers an den inneren Flächen der Wände stoppen: -wallX und wallX. Die Breite des Schlägers ist transform.localScale.x.
  4. Bewege ihn mit rb.MovePosition dorthin.

Drücke Play, bewege den Schläger bis an beide Wände und drücke dann Check.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // Die Innenseiten der Seitenwände befinden sich bei -wallX und wallX

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Bewege dich mit den Pfeiltasten oder A und D und bleibe zwischen den Wänden.
    }
}
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