Zwróć się w kierunku ruchu
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 44 z 71.
transform.LookAt wymaga punktu, na który ma patrzeć. Często zamiast tego masz kierunek: prędkość, wiatr, kierunek ruchu czegoś. Quaternion.LookRotation(direction) zwraca obrót, w którym oś forward (niebieska strzałka z) wskazuje ten kierunek, a oś up obiektu pozostaje skierowana ku osi up świata. Strzała wystrzelona w powietrze najpierw jest skierowana w górę, a podczas opadania przechyla się, ponieważ tak samo zachowuje się jej prędkość:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (rb.linearVelocity != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
}
}Liczy się tylko kierunek, a nie długość: (1, 0, 2) i (3, 0, 6) dają ten sam obrót. Wektor zerowy nie ma kierunku, więc LookRotation(Vector3.zero) wyświetla komunikat Look rotation viewing vector is zero i zwraca Quaternion.identity, co powoduje nagły obrót obiektu w stronę +z. Dlatego strzała najpierw sprawdza prędkość: gdy się zatrzyma, zachowuje dotychczasowe ustawienie. LookAt(target.position) daje taki sam obrót jak LookRotation(target.position - transform.position).
Składowa kierunku skierowana w górę lub w dół przechyla oś forward w tę samą stronę. Jeśli obiekt ma pozostać pionowo, na przykład gdy piechur idzie pod górę, najpierw ustaw y kierunku na 0, aby obiekt obracał się tylko wokół osi y. Drugi argument, LookRotation(direction, Vector3.up), określa, który kierunek jest skierowany w górę; bez niego używana jest wartość Vector3.up.
Wyzwanie
ŚredniUstaw pszczołę przodem w kierunku lotu, zachowując jej pionową pozycję.
- W
LateUpdate()ustawVector3 direction = transform.position - lastPosition;orazdirection.y = 0;. - Tylko gdy
direction != Vector3.zero, ustawtransform.rotation = Quaternion.LookRotation(direction);, aby pszczoła w spoczynku zachowała kierunek, w którym jest zwrócona. - Na koniec zapisz
transform.positionwlastPosition.
Naciśnij „Graj”: pszczoła obraca się w stronę każdego kwiatu, do którego leci. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Obróć obiekt w kierunku, w którym pszczoła poruszyła się od poprzedniej klatki.
}
}
Wszystkie lekcje w sekcji Fizyka i rozgrywka
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwiPoćwicz samodzielnie: Edytor online Unity