Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Kamera 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.
    }
}
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