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.
Aufgabe
MittelLass die Pfeiltasten den Läufer zwischen drei Fahrspuren wechseln.
- In
Update()vonRunnersoll beiInput.GetKeyDown(KeyCode.LeftArrow)lane--ausgeführt werden und beim Drücken der rechten Pfeiltastelane++. - Halte ihn auf der Straße:
lane = Mathf.Clamp(lane, -1, 1);. - Kopiere
transform.positioninp, bewegep.xmitMathf.MoveTowardsund der GeschwindigkeitlaneSpeed * Time.deltaTimein Richtunglane * laneWidthund weisepanschließ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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der BankÜbe selbstständig: Unity-Playground