Menu
CoddyTech

Orbit-Kamera

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

Um einen Punkt zu kreisen, behältst du einen Winkel bei, drehst einen festen Versatz um diesen Winkel und addierst das Ergebnis zum Punkt. Die Multiplikation einer Rotation mit einem Vektor bewirkt die Drehung: Quaternion.Euler(0, angle, 0) * offset schwenkt den Versatz um die y-Achse, wobei seine Länge und Höhe gleich bleiben. Diese Kamera kreist mit 20 Grad pro Sekunde um eine Statue, immer 3 Einheiten nach oben und 6 nach außen:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

Bei einem Winkel von 0 beträgt der Versatz (0, 3, -6), die Kamera befindet sich also hinter der Statue. Bei 90 beträgt er (-6, 3, 0), auf der -x-Seite der Statue, und bei 180 beträgt er (0, 3, 6), vor ihr. Die Kamera zu bewegen, dreht sie nicht, daher richtet LookAt sie von jeder neuen Position aus wieder auf die Statue.

Ein zweiter Winkel hebt die Kamera an: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) dreht die Rückwärtsrichtung um pitch nach oben (eine positive Drehung um x kippt (0, 0, -1) nach oben) und anschließend um yaw, sodass die Kamera bei jedem Winkel distance Einheiten entfernt bleibt.

Der Winkel befindet sich wie bei Euler-Winkeln in einem eigenen Feld: Er kann über 360 hinaus ansteigen oder unter 0 fallen, ohne dass es einen Sprung gibt, und du kannst ihn begrenzen oder über die Tastatur ändern. Wenn du dies in LateUpdate() machst, wird die Kamera positioniert, nachdem sich die Statue oder ein Spieler in diesem Frame bewegt hat.

challenge icon

Aufgabe

Mittel

Lass den Spieler die Kamera um den Turm herumfliegen.

  1. In Update() ändern die Pfeiltasten nach rechts und links yaw mit turnSpeed, und die Pfeiltasten nach oben und unten ändern pitch mit tiltSpeed, jeweils multipliziert mit Time.deltaTime.
  2. Behalte dann pitch = Mathf.Clamp(pitch, 10f, 60f); bei.
  3. Setze in LateUpdate() transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, dann transform.LookAt(target);.

Drücke „Spielen“ und fliege um den Turm herum. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // Die Pfeiltasten ändern yaw und pitch.
    }

    void LateUpdate()
    {
        // Positioniere die Kamera um target herum und richte sie darauf aus.
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground