Menu
CoddyTech

Vorausschau

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

Eine auf einen fahrenden Spieler zentrierte Kamera zeigt ebenso viel von dem Bereich, aus dem er kommt, wie von dem Bereich, auf den er zufährt. Eine Seitenansicht kann stattdessen vorausblicken: Platziere sie ein paar Einheiten vor dem Spieler, auf der Seite, in die er sich bewegt.

Die Seite wechselt, wenn der Spieler umkehrt, und ein sofort wechselnder Vorsprung lässt die ganze Ansicht springen. Speichere den Vorsprung daher in einem Feld und bewege ihn mit Mathf.MoveTowards nach und nach bei jedem Frame in Richtung seines neuen Werts. Diese Bootskamera blickt 2 Einheiten voraus und bewegt sich mit 3 Einheiten pro Sekunde:

float lead;
float heading = 1f;   // 1 fährt nach rechts, -1 fährt nach links

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

Die Richtung entspricht der letzten Bewegungsrichtung des Boots: Vergleiche seine x-Position mit der x-Position im letzten Frame und ändere die Richtung in einem Frame, in dem es sich nicht bewegt hat, nicht, damit ein stillstehendes Boot seinen Vorsprung behält.

challenge icon

Aufgabe

Mittel

Lass die seitliche Kamera mehr von dem zeigen, wohin der Läufer läuft.

  1. Vergleiche in LateUpdate() die x-Position des Läufers mit lastX: Bei einer Bewegung nach rechts wird direction auf 1 gesetzt, bei einer Bewegung nach links auf -1; bleibt der Läufer stehen, bleibt der Wert unverändert.
  2. Gleite mit shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);.
  3. Setze die x-Position der Kamera auf player.position.x + shift und behalte y und z bei.

Drücke „Spielen“ und laufe in beide Richtungen. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

public class LookAheadCamera : MonoBehaviour
{
    public Transform player;
    public float ahead = 3f;
    public float shiftSpeed = 4f;

    void LateUpdate()
    {
        // Positioniere die Kamera in der zuletzt eingeschlagenen Bewegungsrichtung des Spielers um ahead Einheiten voraus und verschiebe sie dabei mit shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground