Płynne podążanie
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 47 z 71.
Kamera, która w LateUpdate() kopiuje pozycję gracza i dodaje przesunięcie, sprawia, że każde szarpnięcie gracza powoduje szarpnięcie widoku. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) zwraca pozycję przesuniętą w stronę target tak, jak porusza się tłumiona sprężyna: przyspiesza, zwalnia w miarę zbliżania się do celu i dociera do niego bez przekroczenia. Ta kamera podąża za graczem z pozycji 3 jednostki wyżej i 6 jednostek za nim, z niewielkim opóźnieniem:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;
void LateUpdate()
{
Vector3 target = player.position + offset;
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}ref przekazuje SmoothDamp samą zmienną zamiast jej kopii, dzięki czemu metoda może ją zmienić. SmoothDamp zapisuje w velocity aktualną prędkość kamery na wszystkich trzech osiach i potrzebuje jej ponownie w następnej klatce, dlatego jest to pole. Gdyby zmienna była zadeklarowana wewnątrz LateUpdate(), w każdej klatce zaczynałaby od zera, a kamera poruszałaby się bardzo powoli — o około pół procenta drogi na klatkę. W przypadku pojedynczej liczby, takiej jak powiększenie kamery, Mathf.SmoothDamp działa tak samo, używając prędkości typu float.
smoothTime określa, jak duże jest opóźnienie kamery: przy wartości 0.3 w ciągu 0.3 sekundy pokonuje około 60% nagłego skoku, a po 1 sekundzie jest już prawie na miejscu. Mniejsza wartość oznacza ściślejsze podążanie. SmoothDamp sam odczytuje Time.deltaTime, więc w wywołaniu niczego nie mnoży się przez tę wartość.
Wyzwanie
ŚredniSpraw, aby kamera płynnie podążała za graczem ze stałej wysokości.
- Dodaj pole
Vector3 velocity;. - W
LateUpdate()utwórzVector3 target = new Vector3(player.position.x, height, player.position.z - back);, aby skok nie poruszał widokiem. - Ustaw
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);.
Naciśnij „Graj”, pobiegaj i podskocz: kamera lekko podąża za graczem i nigdy nie podskakuje. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class TopDownCamera : MonoBehaviour
{
public Transform player;
public float height = 12f;
public float back = 5f;
public float smoothTime = 0.25f;
void LateUpdate()
{
// Płynnie przesuwaj się w stronę punktu nad graczem (x), oddalonego od niego o back jednostek do tyłu (z), na stałej wysokości.
}
}
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