Menu
CoddyTech

Sanftes Folgen

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 45 von 63.

Eine Kamera, die in LateUpdate() die Position des Spielers zuzüglich eines Versatzes übernimmt, macht jeden Ruck des Spielers zu einem Ruck der Ansicht. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) gibt eine Position zurück, die sich target nähert, so wie sich eine gedämpfte Feder bewegt: Sie beschleunigt, wird langsamer, wenn sie sich dem Ziel nähert, und kommt an, ohne über das Ziel hinauszuschießen. Diese Kamera folgt dem Spieler aus 3 Einheiten Höhe und 6 Einheiten Abstand nach hinten, mit leichter Verzögerung:

public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;

void LateUpdate()
{
    Vector3 target = player.position + offset;
    transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}

ref übergibt SmoothDamp die Variable selbst statt einer Kopie, sodass die Methode sie ändern kann. SmoothDamp speichert die aktuelle Geschwindigkeit der Kamera auf allen drei Achsen in velocity und benötigt sie im nächsten Frame wieder, weshalb es sich um ein Feld handelt. Würde die Variable innerhalb von LateUpdate() deklariert, würde sie in jedem Frame bei null beginnen, und die Kamera würde nur kriechen: etwa ein halbes Prozent des Weges pro Frame. Für eine einzelne Zahl, etwa den Zoom einer Kamera, funktioniert Mathf.SmoothDamp genauso mit einer float-Geschwindigkeit.

smoothTime bestimmt, wie weit die Kamera hinterherhinkt: Bei 0.3 legt sie in 0.3 Sekunden etwa 60 % eines plötzlichen Sprungs zurück und ist nach 1 Sekunde fast angekommen. Ein kleinerer Wert sorgt für eine engere Verfolgung. SmoothDamp liest Time.deltaTime selbst aus, deshalb wird in diesem Aufruf nichts damit multipliziert.

challenge icon

Aufgabe

Mittel

Die Kamera blickt aus einer festen Höhe auf den Spieler hinab. Lass sie mit Vector3.SmoothDamp und smoothTime (0.25) sanft diesem Punkt folgen:

  • x: das x des Spielers;
  • z: back (5) Einheiten hinter dem Spieler, in Richtung -z;
  • y: immer height (12), unabhängig von der Höhe des Spielers. Die Leertaste lässt den Spieler hüpfen, und die Ansicht darf nicht wippen.

Drücke Play, lauf und hüpfe, dann Check.

Probier es selbst

using UnityEngine;

public class TopDownCamera : MonoBehaviour
{
    public Transform player;
    public float height = 12f;
    public float back = 5f;
    public float smoothTime = 0.25f;

    void LateUpdate()
    {
        // Bewege dich sanft auf die Position über dem Spieler (x) zu, back Einheiten hinter ihm (z), auf einer festen Höhe.
    }
}
quiz iconTeste dich selbst

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