Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Ustaw pszczołę przodem w kierunku lotu, zachowując jej pionową pozycję.

  1. W LateUpdate() ustaw Vector3 direction = transform.position - lastPosition; oraz direction.y = 0;.
  2. Tylko gdy direction != Vector3.zero, ustaw transform.rotation = Quaternion.LookRotation(direction);, aby pszczoła w spoczynku zachowała kierunek, w którym jest zwrócona.
  3. Na koniec zapisz transform.position w lastPosition.

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

Poćwicz samodzielnie: Edytor online Unity