Menu
CoddyTech

Sanft drehen

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

Wenn du transform.rotation direkt auf eine neue Rotation setzt, dreht sich ein Objekt in einem einzigen Frame. Quaternion.RotateTowards(current, goal, maxDegrees) gibt current zurück, in Richtung goal um höchstens maxDegrees gedreht, und niemals über das Ziel hinaus. Mit turnSpeed * Time.deltaTime als Schritt dreht sich das Objekt mit gleichbleibender Geschwindigkeit und kommt genau am Ziel zum Stillstand, wie es MoveTowards bei Positionen tut. Diese Sonnenblume folgt der Sonne mit 30 Grad pro Sekunde:

public Transform sun;
public float turnSpeed = 30f;

void Update()
{
    Quaternion goal = Quaternion.LookRotation(sun.position - transform.position);
    transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);
}

Bei einer 90 Grad entfernten Sonne braucht die Sonnenblume 3 Sekunden, jeweils 30 Grad. Sie dreht sich auf dem kürzesten Weg, und das Ziel wird in jedem Frame erneut berechnet, sodass sie einer sich bewegenden Sonne folgt.

Quaternion.Slerp(a, b, t) ist die Rotation um den Bruchteil t des Weges von a nach b, so wie Vector3.Lerp für Punkte. Wird Slerp(transform.rotation, goal, 5f * Time.deltaTime) in Update() verwendet, dreht es sich in jedem Frame um einen Teil des verbleibenden Winkels: zuerst schnell, in der Nähe des Ziels immer langsamer, niemals mit einer festgelegten Geschwindigkeit und ohne das Ziel ganz zu erreichen. Dieses sanfte Auslaufen eignet sich für eine Kamera oder eine sich drehende Kopfbewegung. Wenn die Drehgeschwindigkeit eine Spielregel ist, etwa bei einer Kanone, die sich mit 60 Grad pro Sekunde dreht, verwende RotateTowards.

challenge icon

Aufgabe

Mittel

Die Eule dreht sich in die Richtung, auf die du zeigst. Jeder Pfeil gibt ihr eine neue Blickrichtung: nach oben +z, nach rechts +x, nach unten -z, nach links -x. Beim Drücken beginnt sie, sich mit turnSpeed (180) Grad pro Sekunde gleichmäßig in diese Richtung zu drehen. Sie beendet die Drehung auch, nachdem die Taste losgelassen wurde, und hält genau in der neuen Richtung an.

Drücke Play, drücke die Pfeiltasten und dann Check.

Probier es selbst

using UnityEngine;

public class Owl : MonoBehaviour
{
    public float turnSpeed = 180f;

    void Update()
    {
        // Oben, rechts, unten, links: Drehe dich mit turnSpeed Grad pro Sekunde in Richtung +z, +x, -z, -x.
    }
}
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