Menu
CoddyTech

Zwróć się w kierunku ruchu

Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 42 z 63.

transform.LookAt potrzebuje punktu, na który ma patrzeć. Często masz jednak kierunek: prędkość, wiatr, kierunek ruchu czegoś. Quaternion.LookRotation(direction) zwraca obrót, w którym kierunek do przodu (niebieska strzałka z) wskazuje wzdłuż tego kierunku, a góra obiektu pozostaje skierowana ku górze świata. Strzała wystrzelona w powietrze początkowo wskazuje w górę, a podczas opadania przechyla się, ponieważ tak samo zmienia 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, 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) zapisuje w logu Look rotation viewing vector is zero i zwraca Quaternion.identity, co powoduje, że obiekt nagle zwraca się 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 w górę lub w dół przechyla wraz z nim kierunek do przodu. Jeśli coś ma pozostać pionowo, na przykład postać idąca 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, gdzie jest góra; bez niego używana jest wartość Vector3.up.

challenge icon

Wyzwanie

Średni

Pszczoła lata od kwiatka do kwiatka. Gotowy skrypt Mover prowadzi ją po liniach prostych, wznosząc ją lub opuszczając po drodze, i zatrzymuje ją na 1 sekundę przy każdym kwiatku; pozostaw Mover bez zmian. Napisz FaceMotion, aby pszczoła była skierowana w kierunku lotu:

  • Jest skierowana w kierunku, w którym poruszała się od poprzedniej klatki, patrząc z góry.
  • Pozostaje pionowo ustawiona: jej nos nie unosi się ani nie opada podczas wznoszenia lub opadania.
  • Podczas postoju zachowuje dotychczasowy kierunek, a w logach nic się nie pojawia.

Kod umieść w LateUpdate(), aby Mover zdążył już poruszyć pszczołę w tej klatce. Naciśnij Play, a następnie Check.

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.
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Fizyka i rozgrywka