Menu
CoddyTech

In Bewegungsrichtung schauen

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

transform.LookAt benötigt einen Punkt, auf den es blicken soll. Oft hast du stattdessen eine Richtung: eine Geschwindigkeit, den Wind oder die Richtung, in die sich etwas bewegt hat. Quaternion.LookRotation(direction) gibt die Rotation zurück, deren Vorwärtsrichtung (der blaue z-Pfeil) entlang dieser Richtung zeigt, während die Aufwärtsrichtung des Objekts weiterhin zur Aufwärtsrichtung der Welt zeigt. Ein Pfeil, der in die Luft geschossen wird, zeigt zuerst nach oben und kippt beim Fallen um, weil sich seine Geschwindigkeit genauso verhält:

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (rb.linearVelocity != Vector3.zero)
    {
        transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
    }
}

Es zählt nur die Richtung, nicht die Länge: (1, 0, 2) und (3, 0, 6) ergeben dieselbe Rotation. Ein Nullvektor hat keine Richtung, daher protokolliert LookRotation(Vector3.zero) Look rotation viewing vector is zero und gibt Quaternion.identity zurück, wodurch das Objekt so gedreht wird, dass es in Richtung +z zeigt. Deshalb prüft der Pfeil zuerst: Sobald er stehen bleibt, behält er die Ausrichtung bei, die er hatte. LookAt(target.position) ergibt dieselbe Rotation wie LookRotation(target.position - transform.position).

Der Auf- und Abwärtsanteil der Richtung kippt die Vorwärtsrichtung entsprechend nach oben oder unten. Wenn etwas aufrecht bleiben muss, etwa ein Läufer, der einen Hang hinaufgeht, setze zuerst das y der Richtung auf 0, damit sich das Objekt nur um y dreht. Ein zweites Argument, LookRotation(direction, Vector3.up), gibt an, welche Richtung oben ist; Vector3.up wird standardmäßig verwendet.

challenge icon

Aufgabe

Mittel

Lass die Biene in die Richtung schauen, in die sie fliegt, und dabei aufrecht bleiben.

  1. Setze in LateUpdate() Vector3 direction = transform.position - lastPosition; und direction.y = 0;.
  2. Setze nur dann, wenn direction != Vector3.zero, transform.rotation = Quaternion.LookRotation(direction);, damit eine ruhende Biene ihre Blickrichtung beibehält.
  3. Speichere zuletzt transform.position in lastPosition.

Drücke auf „Spielen“: Die Biene dreht sich zu jeder Blume, zu der sie fliegt. Drücke dann auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class FaceMotion : MonoBehaviour
{
    Vector3 lastPosition;

    void Start()
    {
        lastPosition = transform.position;
    }

    void LateUpdate()
    {
        // Richte die Biene in die Richtung aus, in die sie sich seit dem letzten Frame bewegt hat.
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground