Menu
CoddyTech

Die Arena

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 59 von 71.

In diesem Kapitel entsteht Arena Escape. Du weichst Jägern in einer ummauerten Arena aus, während Wellen von ihnen hereinströmen. Drei Treffer beenden den Durchlauf, und sobald die letzte Welle vorbei ist, öffnet sich ein Ausgang. Das Spiel besteht aus fünf Skripten, die von Anfang an im Projekt 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 selbst festlegt. Dadurch kommt der Rückstoß eines Jägers zu seiner Bewegung hinzu, anstatt sie aufzuheben. Ein Schub allein würde ihn für immer schneller machen, also nimmt linearDamping ihm in jedem Schritt einen Teil seiner Geschwindigkeit: Bei einem gleichmäßigen Schub pendelt sich die Geschwindigkeit bei etwa der Beschleunigung geteilt durch die Dämpfung ein. Dieser Schwebeschlitten bewegt sich vorwärts, solange die Leertaste gedrückt gehalten 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 Schlitten eine Höchstgeschwindigkeit von etwa 6 Einheiten pro Sekunde. Wird die Leertaste losgelassen, bringt die Dämpfung ihn zum Stillstand, anstatt ihn für immer weitergleiten zu lassen. ForceMode.Acceleration ignoriert die Masse, sodass ein schwerer Schlitten genau so beschleunigt wie ein leichter. Der Collider des Schlittens hat ein reibungsfreies PhysicsMaterial: Mit der Reibung des Bodens zusätzlich zur Dämpfung wäre seine Höchstgeschwindigkeit niedriger.

challenge icon

Aufgabe

Mittel

Starte Arena Escape: Der Spieler gleitet durch Kräfte.

  1. Setze in Start() nach der GetComponent-Zeile rb.linearDamping = accel / topSpeed;, damit sich die Geschwindigkeit bei etwa topSpeed einpendelt.
  2. Erstelle in FixedUpdate() new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. Übergib das normalized multipliziert mit accel an rb.AddForce mit ForceMode.Acceleration.

Drücke „Spielen“ und gleite durch die Arena. Drücke dann „Prüfen“.

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
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground