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.
Wyzwanie
ŚredniTen 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);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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 startowa2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur