Drei Fahrspuren
Lektion 1 von 20 im Kurs Unity-Spiel: Himmelsbahnen von Coddy.
In diesem Kurs entwickelst du in einer Lektion ein ganzes Spiel. Ein Läufer rast auf einer hoch oben am Himmel verlaufenden Straße entlang. Hindernisse, Balken und Mauern kommen auf ihn zu, Münzen säumen die Spuren, und die Straße wird schneller, je länger du durchhältst.
Das Projekt enthält bereits vier Skripte: Runner für den Spieler, Road, GameManager und Coin. Die meisten sind vorerst leer und werden Lektion für Lektion ausgefüllt. Ein fünftes Skript, CameraFit für die Kamera, ist vorgegeben: Es verbreitert die Ansicht auf einem hohen Handybildschirm, damit alle drei Spuren hineinpassen, und du musst es nicht ändern.
Der Läufer bewegt sich nie vorwärts. Er wechselt nur zwischen drei Spuren: links, Mitte und rechts. Behalte die Spur als ganze Zahl bei, -1, 0 oder 1, und berechne, wo sie sich auf der x-Achse befindet:
float targetX = lane * laneWidth;Der Läufer hat einen CharacterController, deshalb bewegt er sich mit controller.Move(motion): Move erhält die Strecke, die in diesem Frame zurückgelegt werden soll, nicht die Position, an der die Bewegung enden soll. Um bei targetX anzukommen, bewege dich um die Differenz zwischen diesem Wert und der aktuellen Position des Läufers:
float x = targetX;
Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
controller.Move(move);Mathf.Max(-1, lane - 1) ist lane - 1, aber niemals kleiner als -1, damit es keine Spur links von der linken Spur gibt.
Aufgabe
Einfach- Wenn in
Runner.UpdateA oder die linke Pfeiltaste gedrückt wird (Input.GetKeyDown), setzelane = Mathf.Max(-1, lane - 1). - Wenn D oder die rechte Pfeiltaste gedrückt wird, setze
lane = Mathf.Min(1, lane + 1). - Berechne dann wie oben
targetXund bewege den Läufer mitcontroller.Movedorthin. - Drücke „Spielen“ und probiere A und D aus.
Probier es selbst
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public int lane;
private CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// Hier die Spur wechseln
}
}
Alle Lektionen in Unity-Spiel: Himmelsbahnen
Übe selbstständig: Unity-Playground