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.
Aufgabe
MittelLass die Biene in die Richtung schauen, in die sie fliegt, und dabei aufrecht bleiben.
- Setze in
LateUpdate()Vector3 direction = transform.position - lastPosition;unddirection.y = 0;. - Setze nur dann, wenn
direction != Vector3.zero,transform.rotation = Quaternion.LookRotation(direction);, damit eine ruhende Biene ihre Blickrichtung beibehält. - Speichere zuletzt
transform.positioninlastPosition.
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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground