Płynne podążanie
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 45 z 63.
Kamera, która kopiuje pozycję gracza z przesunięciem w LateUpdate(), sprawia, że każdy wstrząs gracza powoduje wstrząs obrazu. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) zwraca pozycję przesuniętą w kierunku target tak, jak porusza się tłumiona sprężyna: przyspiesza, zwalnia, gdy zbliża 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 została zadeklarowana wewnątrz LateUpdate(), w każdej klatce zaczynałaby od zera, a kamera poruszałaby się bardzo powoli, pokonując 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 pokonuje ona około 60% nagłego skoku w ciągu 0.3 sekundy i niemal dociera do celu po 1 sekundzie. Mniejsza wartość oznacza ściślejsze podążanie. SmoothDamp sam odczytuje Time.deltaTime, więc w wywołaniu niczego się przez nie nie mnoży.
Wyzwanie
ŚredniKamera patrzy na gracza z góry, ze stałej wysokości. Spraw, by płynnie podążała za graczem za pomocą Vector3.SmoothDamp i smoothTime (0.25), zbliżając się do tego miejsca:
- x: x gracza;
- z:
back(5) jednostek za graczem, w kierunku -z; - y: zawsze
height(12), niezależnie od wysokości gracza. Spacja sprawia, że gracz podskakuje, a widok nie może podskakiwać.
Naciśnij Play, pobiegaj i podskakuj, a następnie naciśnij Check.
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 player (x), oddalonego od niego o back jednostek do tyłu (z), na stałej wysokości.
}
}
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