Vorausschau
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 47 von 63.
Eine auf ein bewegliches Ziel gerichtete Kamera zeigt ebenso viel davon, wo es gewesen ist, wie davon, wohin es sich bewegt. Richte sie stattdessen auf einen Punkt vor ihm: die Position des Ziels plus seine Geschwindigkeit multipliziert mit einer Vorlaufzeit in Sekunden. Diese Kamera auf einem Ständer neben einer Rennstrecke dreht sich mit dem Auto mit und richtet sich einen halben Sekundenbruchteil vor ihm aus:
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}Bei 20 Einheiten pro Sekunde liegt der Zielpunkt 10 Einheiten vor dem Auto, bei 4 Einheiten pro Sekunde sind es 2, und ein stehendes Auto wird direkt anvisiert. Die Geschwindigkeit entspricht der tatsächlichen Bewegung des Autos, daher liegt der Punkt bei einem Schleudern oder beim Rückwärtsfahren an der richtigen Stelle. transform.forward wäre dafür ungeeignet: Bei einem rückwärtsfahrenden Auto zeigt die Vorwärtsrichtung weg von der Bewegungsrichtung, und die Vorwärtsrichtung eines rollenden Balls dreht sich mit ihm.
Auch eine Verfolgungskamera kann vorausblicken: Sie zeigt einen Punkt vor ihrem Ziel statt des Ziels selbst. Wenn dieser Punkt auf die andere Seite wechseln kann, etwa wenn sich der Spieler umdreht, ändere den Vorlauf mit jedem Bild ein wenig, sonst springt die ganze Ansicht auf einmal.
Aufgabe
MittelDiese Seitenansicht folgt dem Läufer entlang der x-Achse (mit den Pfeilen bewegst du ihn nach links und rechts). Sorge dafür, dass die Kamera mehr von der Strecke zeigt, in die der Läufer sich bewegt:
- Die Kamera befindet sich
ahead(3) Einheiten vor dem Läufer entlang der x-Achse, auf der Seite, in deren Richtung sich der Läufer zuletzt bewegt hat. Bevor sich der Läufer zum ersten Mal bewegt, ist sie auf ihn zentriert. - Wenn der Läufer umkehrt, gleitet der Vorsprung mit
shiftSpeed(4) Einheiten pro Sekunde auf die andere Seite, anstatt zu springen. - Wenn der Läufer anhält, behält die Kamera ihren Vorsprung bei.
- Die y- und z-Position der Kamera bleiben unverändert.
Drücke Play, laufe in beide Richtungen und klicke dann auf Check.
Probier es selbst
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Bewege die Kamera in die Richtung der letzten Bewegung des Spielers um ahead Einheiten voraus, mit einem gleitenden Übergang bei shiftSpeed.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand