Menu
CoddyTech

Patrzenie w przód

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

Kamera wyśrodkowana na poruszającym się graczu pokazuje tyle samo miejsca, które gracz już przebył, co tego, w stronę którego zmierza. Zamiast tego możesz ustawić widok z boku: umieść kamerę kilka jednostek przed graczem, po stronie, w którą zmierza.

Strona zmienia się, gdy gracz zawraca, a natychmiastowa zmiana kierunku wyprzedzenia sprawia, że cały widok skacze. Dlatego przechowuj wyprzedzenie w polu i stopniowo przesuwaj je ku nowej wartości za pomocą Mathf.MoveTowards, odrobinę w każdej klatce. Ta kamera łodzi wyprzedza ją o 2 jednostki i przesuwa się z szybkością 3 jednostek na sekundę:

float lead;
float heading = 1f;   // 1 płynie w prawo, -1 płynie w lewo

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

Kierunek wskazuje, w którą stronę łódź poruszała się ostatnio: porównaj jej pozycję x z pozycją x z poprzedniej klatki i nie zmieniaj kierunku w klatce, w której łódź się nie poruszyła, aby stojąca w miejscu łódź zachowała wyprzedzenie.

challenge icon

Wyzwanie

Średni

Ustaw boczną kamerę tak, aby pokazywała więcej tego, dokąd biegnie postać.

  1. W metodzie LateUpdate() porównaj współrzędną x postaci z lastX: ruch w prawo ustawia direction na 1, ruch w lewo na -1, a podczas postoju wartość pozostaje bez zmian.
  2. Przesuwaj shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);.
  3. Ustaw współrzędną x kamery na player.position.x + shift, pozostawiając y i z bez zmian.

Naciśnij „Graj” i pobiegnij w obie strony. Następnie naciśnij „Sprawdź”.

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);
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity