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.
Aufgabe
MittelLass die seitliche Kamera mehr von dem zeigen, wohin der Läufer läuft.
- Vergleiche in
LateUpdate()die x-Position des Läufers mitlastX: Bei einer Bewegung nach rechts wirddirectionauf 1 gesetzt, bei einer Bewegung nach links auf -1; bleibt der Läufer stehen, bleibt der Wert unverändert. - Gleite mit
shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);. - Setze die x-Position der Kamera auf
player.position.x + shiftund 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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground