In Bewegungsrichtung schauen
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 42 von 63.
transform.LookAt benötigt einen Punkt, auf den es schauen soll. Oft hast du stattdessen eine Richtung: eine Geschwindigkeit, den Wind oder die Bewegungsrichtung von etwas. Quaternion.LookRotation(direction) gibt die Rotation zurück, deren Vorwärtsrichtung (der blaue z-Pfeil) entlang dieser Richtung zeigt, während das Oben des Objekts weiterhin zum Oben der Welt ausgerichtet bleibt. Ein in die Luft geschossener Pfeil zeigt zunächst nach oben und kippt beim Fallen um, denn das tut seine Geschwindigkeit ebenfalls:
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 ausgerichtet wird, dass es nach +z zeigt. Deshalb prüft der Pfeil zuerst: Sobald er anhält, behält er seine Ausrichtung bei. 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. Bei etwas, das aufrecht bleiben muss, etwa einem Läufer, der einen Hang hinaufgeht, setze zuerst 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 verwendet, wenn du es weglässt.
Aufgabe
MittelDie Biene fliegt von Blüte zu Blüte. Das fertige Mover-Skript lässt sie in geraden Linien fliegen, auf dem Weg steigen oder sinken und 1 Sekunde auf jeder Blüte verweilen; lass Mover unverändert. Schreibe FaceMotion so, dass die Biene in Flugrichtung zeigt:
- Sie zeigt in die Richtung, in die sie sich seit dem letzten Frame bewegt hat, von oben gesehen.
- Sie bleibt aufrecht: Beim Steigen oder Sinken zeigt ihre Nase weder nach oben noch nach unten.
- Während sie verweilt, behält sie ihre Ausrichtung bei, und es wird nichts protokolliert.
Der Code gehört in LateUpdate(), damit Mover die Biene in diesem Frame bereits bewegt hat. Drücke Spielen und dann Prüfen.
Probier es selbst
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Richte dich in die Richtung aus, in die sich die Biene seit dem letzten Frame bewegt hat.
}
}
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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand