Menu
CoddyTech

Starten

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

Der Ball wartet auf dem Schläger, bis der Spieler ihn abschießt. Bis dahin setzt das Skript ihn in jedem Frame oben auf den Schläger, sodass er sich mit dem Schläger bewegt, und ein bool merkt sich, ob er abgeschossen wurde. Beim Abschuss wird die linearVelocity des Rigidbody einmalig festgelegt. Die Schwerkraft des Rigidbody des Balls ist deaktiviert, sodass er von da an mit dieser Geschwindigkeit in einer geraden Linie fliegt, bis er auf etwas trifft.

Ein Schwimmer funktioniert genauso: Er hängt unter der Rutenspitze, bis ausgeworfen wird.

bool cast;

void Update()
{
    if (cast) return;
    transform.position = rodTip.position + Vector3.down * 1.5f;
    if (Keyboard.current.spaceKey.wasPressedThisFrame)
    {
        cast = true;
        rb.linearVelocity = new Vector3(4f, 3f, 0f);
    }
}

wasPressedThisFrame ist nur in dem Frame true, in dem die Taste gedrückt wird. Deshalb wird es in Update() ausgelesen, das einmal pro Frame ausgeführt wird. Der Schwimmer fliegt mit der Länge von (4, 3, 0), also 5 Einheiten pro Sekunde. Um ihn in eine beliebige Richtung mit einer exakten Geschwindigkeit abzuschießen, machst du die Richtung mit .normalized 1 Einheit lang und multiplizierst sie dann mit der Geschwindigkeit.

challenge icon

Aufgabe

Einfach

In Ball:

  1. Füge ein bool launched hinzu.
  2. Schreibe public void Launch(Vector3 direction): Dabei wird launched auf true und die linearVelocity des Rigidbody auf die Richtung mit einer Länge von 1 Einheit multipliziert mit speed gesetzt.
  3. Füge Update() hinzu. Solange der Ball nicht gestartet wurde, positioniert die Methode den Ball 0.5 Einheiten über der Position des Paddles. Wird die Leertaste gedrückt, ruft sie Launch(new Vector3(0.3f, 1f, 0f)) auf.

Der Ball prallt noch nicht ab und kommt daher an der ersten Wand, die er trifft, sofort zum Stillstand: Das wird in der nächsten Lektion behoben.

Drücke Play, bewege das Paddle, starte den Ball und klicke dann auf Check.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;

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

    // Als Nächstes: Der Ball bleibt auf dem Schläger, bis er mit Space gestartet wird.
}
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