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.
Aufgabe
EinfachIn Ball:
- Füge ein
bool launchedhinzu. - Schreibe
public void Launch(Vector3 direction): Dabei wirdlaunchedauf true und dielinearVelocitydes Rigidbody auf die Richtung mit einer Länge von 1 Einheit multipliziert mitspeedgesetzt. - 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 sieLaunch(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.
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.