Menu
CoddyTech

Drei Spuren

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

In diesem Kapitel entwickelst du 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 nie zu Ende ist. Das Spiel hat vier Skripte: Runner, Spawner, Obstacle und GameManager. Die letzten drei sind vorerst leer.

Eine Spielfigur auf festen Spuren wird nicht wie ein Auto gesteuert: Sie befindet sich immer an einer von wenigen festen Positionen. Speichere die Position als ganze Zahl, ändere die Zahl bei einem Tastendruck und berechne daraus die Position. Diese Plattform eines 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 ausmacht. Mit GetKey würde bei jedem Frame, in dem die Taste gedrückt gehalten wird, ein Stockwerk hinzukommen. Mathf.Clamp hält die Zahl innerhalb des Gebäudes. Deshalb bewirkt Drücken nach oben im obersten Stockwerk nichts, und der nächste Druck nach unten führt direkt zu Stockwerk 3. Mathf.MoveTowards bewegt die Plattform mit moveSpeed Einheiten pro Sekunde zu ihrem Stockwerk und hält genau dort an, anstatt sie in einem Frame dorthin springen zu lassen. Die Position wird kopiert, geändert und wieder zugewiesen, weil sich transform.position.y nicht allein setzen lässt.

challenge icon

Aufgabe

Mittel

Lass die Pfeiltasten den Läufer zwischen drei Fahrspuren wechseln.

  1. In Update() von Runner soll bei Input.GetKeyDown(KeyCode.LeftArrow) lane-- ausgeführt werden und beim Drücken der rechten Pfeiltaste lane++.
  2. Halte ihn auf der Straße: lane = Mathf.Clamp(lane, -1, 1);.
  3. Kopiere transform.position in p, bewege p.x mit Mathf.MoveTowards und der Geschwindigkeit laneSpeed * Time.deltaTime in Richtung lane * laneWidth und weise p anschließend wieder zu.

Drücke „Spielen“, klicke ins Spiel und wechsle die Fahrspur: Der Läufer gleitet hinüber. Klicke dann auf „Prüfen“.

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

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground