Menu
CoddyTech

Drei Spuren

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 27 von 56.

In diesem Kapitel erstellen wir einen Endless Runner. Eine Spielfigur rast eine Straße mit drei Fahrspuren entlang und wechselt die Spur, um den Hindernissen auszuweichen, die auf sie zukommen. In den nächsten Lektionen wird die Straße schneller, die zurückgelegte Strecke wird auf dem Bildschirm angezeigt, ein Zusammenstoß beendet den Lauf und eine Schaltfläche ermöglicht einen erneuten Versuch, und der beste Lauf wird gespeichert. Die Spielfigur bewegt sich nie vorwärts: Sie bleibt bei z = 0, und die Hindernisse bewegen sich auf sie zu, sodass die Straße niemals endet. Das Spiel hat vier Skripte, Runner, Spawner, Obstacle und GameManager, und die letzten drei sind vorerst leer.

Eine Spielfigur auf mehreren Spuren wird nicht wie ein Auto gesteuert: Sie befindet sich immer an einer von wenigen festgelegten Positionen. Speichere die Position als ganze Zahl, ändere die Zahl bei einem Tastendruck und berechne daraus die Position. Die Plattform dieses Fensterputzers bedient die fünf Stockwerke eines Gebäudes, die jeweils 3 Einheiten auseinanderliegen:

[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
    if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
    floor = Mathf.Clamp(floor, 0, 4);

    Vector3 p = transform.position;
    p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
    transform.position = p;
}

GetKeyDown bewirkt, dass ein Tastendruck ein Stockwerk weiterführt, während GetKey bei jedem Frame, in dem die Taste gedrückt gehalten wird, ein Stockwerk hinzufügt. Mathf.Clamp hält die Zahl innerhalb des Gebäudes, sodass ein Tastendruck nach oben im obersten Stockwerk nichts bewirkt und der nächste Tastendruck nach unten direkt zu Stockwerk 3 führt. Mathf.MoveTowards bewegt die Plattform mit moveSpeed Einheiten pro Sekunde in Richtung ihres Stockwerks und hält genau dort an, statt in einem Frame dorthin zu springen. Die Position wird kopiert, geändert und wieder zugewiesen, weil transform.position.y nicht allein gesetzt werden kann.

challenge icon

Aufgabe

Mittel

Starte den Endless Runner mit dem Läufer. Der Inspector gibt Runner eine laneWidth von 2.5 und eine laneSpeed von 15, und lane ist -1 für die linke Spur, 0 für die mittlere und 1 für die rechte. In Runners Update():

  • Jeder Druck auf den linken oder rechten Pfeil ändert lane entsprechend um eins. Wenn du die Taste gedrückt hältst, ändert sich der Wert trotzdem nur um eins.
  • lane wird nie kleiner als -1 oder größer als 1.
  • Der Läufer gleitet entlang der x-Achse mit laneSpeed Einheiten pro Sekunde zu lane * laneWidth und behält dabei sein y und z bei.

Lass die anderen drei Skripte vorerst unverändert. Drücke Play, klicke auf das Spiel und wechsle die Spur, dann Check.

Probier es selbst

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1 ist die linke Spur, 0 die mittlere, 1 die rechte

    void Update()
    {
        // Wechsle mit den Pfeiltasten die Spur und gleite dann zum x-Wert der Spur
    }
}
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 Echte Spiele entwickeln