Menu
CoddyTech

Die Arena

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 56 von 63.

In diesem Kapitel entsteht Arena Escape. Du weichst Jägern in einer ummauerten Arena aus, während immer neue Wellen von ihnen hereinströmen. Drei Treffer beenden den Durchlauf, und sobald die letzte Welle besiegt ist, öffnet sich ein Ausgang. Das Spiel besteht aus fünf Skripten, die von Anfang an im Projekt vorhanden sind: Player, Hunter, Spawner, Health und Exit. Die letzten vier sind vorerst leer, und in jeder Lektion wird eines davon ausgefüllt.

Der Spieler bewegt sich mit Kräften statt mit einer Geschwindigkeit, die er festlegt. Dadurch addiert sich der Rückstoß eines Jägers zu seiner Bewegung, anstatt sie zu überschreiben. Ein einzelner Schub würde ihn immer weiter beschleunigen, daher nimmt linearDamping ihm bei jedem Schritt einen Teil seiner Geschwindigkeit: Bei einem gleichmäßigen Schub pendelt sich die Geschwindigkeit bei etwa Beschleunigung geteilt durch Dämpfung ein. Dieses Schwebegleiter-Modell schiebt vorwärts, solange die Leertaste gedrückt wird:

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

Bei einer Beschleunigung von 12 und einer Dämpfung von 2 erreicht der Gleiter eine Höchstgeschwindigkeit von etwa 6 Einheiten pro Sekunde. Wird die Leertaste losgelassen, bringt ihn die Dämpfung zum Stillstand, anstatt ihn endlos weitergleiten zu lassen. ForceMode.Acceleration ignoriert die Masse, daher beschleunigt ein schwerer Gleiter genau wie ein leichter. Der Collider des Gleiters hat ein reibungsfreies PhysicsMaterial: Mit der zusätzlichen Reibung des Bodens würde er eine geringere Höchstgeschwindigkeit erreichen.

challenge icon

Aufgabe

Mittel

Starte Arena Escape mit dem Spieler. Der Inspector weist dem Skript Player die Werte accel (18) und topSpeed (6) zu. Der Spieler hat die Masse 2 und ein reibungsfreies Material; die anderen vier Skripte bleiben vorerst leer.

  • Setze in Start den Wert linearDamping des Rigidbody auf accel / topSpeed, damit sich die Geschwindigkeit des Spielers bei etwa topSpeed einpendelt.
  • Stoße den Spieler bei jedem Physikschritt mit den Pfeiltasten an: links und rechts entlang der x-Achse sowie oben und unten entlang der z-Achse. Verwende dazu ForceMode.Acceleration und eine Beschleunigung von accel.
  • Normalisiere die Richtung der Pfeiltasten, damit die Bewegung diagonal nicht schneller ist als geradeaus.

Drücke Play und bewege dich durch die Arena, dann klicke auf Check.

Probier es selbst

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // Stelle die Dämpfung ein und bewege dann den Spieler mit den Pfeiltasten
    }
}
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 Physik und Gameplay