Menu
CoddyTech

Patrzenie w przód

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

Kamera skierowana na poruszający się cel pokazuje w równym stopniu miejsce, w którym cel był, i to, dokąd zmierza. Zamiast tego skieruj ją na punkt przed nim: pozycję celu plus jego prędkość pomnożoną przez czas wyprzedzenia w sekundach. Ta kamera na statywie przy torze wyścigowym obraca się, by śledzić samochód, i kieruje się na punkt pół sekundy przed nim:

public Rigidbody car;
public float lead = 0.5f;

void LateUpdate()
{
    Vector3 aim = car.position + car.linearVelocity * lead;
    transform.LookAt(aim);
}

Przy prędkości 20 jednostek na sekundę punkt, na który skierowana jest kamera, znajduje się 10 jednostek przed samochodem, przy 4 jednostkach na sekundę — 2 jednostki przed nim, a gdy samochód stoi, kamera jest skierowana bezpośrednio na niego. Prędkość odzwierciedla rzeczywisty ruch samochodu, więc punkt znajduje się we właściwym miejscu podczas poślizgu lub cofania. transform.forward nie sprawdziłoby się: wektor skierowany do przodu cofającego samochodu wskazuje kierunek przeciwny do tego, w którym samochód się porusza, a wektor skierowany do przodu toczącej się piłki obraca się razem z nią.

Kamera śledząca również może wyprzedzać cel: kadruje punkt przed nim zamiast samego celu. Gdy ten punkt może przeskoczyć na drugą stronę, na przykład gdy gracz zawraca, zmieniaj wyprzedzenie stopniowo w każdej klatce, w przeciwnym razie cały widok przeskoczy naraz.

challenge icon

Wyzwanie

Średni

Ten widok z boku podąża za biegaczem wzdłuż osi x (strzałki poruszają nim w lewo i w prawo). Spraw, aby kamera pokazywała więcej tego, dokąd zmierza biegacz:

  • Kamera znajduje się ahead (3) jednostki przed biegaczem wzdłuż osi x, po stronie, w którą biegacz ostatnio się poruszał. Zanim biegacz po raz pierwszy się poruszy, kamera jest wyśrodkowana na nim.
  • Gdy biegacz zmienia kierunek, przesunięcie przechodzi na drugą stronę z prędkością shiftSpeed (4) jednostek na sekundę, zamiast przeskakiwać.
  • Gdy biegacz się zatrzymuje, kamera zachowuje swoje przesunięcie.
  • Położenie kamery na osiach y i z pozostaje bez zmian.

Naciśnij Play, pobiegnij w obu kierunkach, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class LookAheadCamera : MonoBehaviour
{
    public Transform player;
    public float ahead = 3f;
    public float shiftSpeed = 4f;

    void LateUpdate()
    {
        // Wyprzedzaj gracza o ahead jednostek w kierunku, w którym ostatnio się poruszał, przesuwając kamerę z prędkością shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}
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