Menu
CoddyTech

Kamera orbitalna

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

Aby krążyć wokół punktu, przechowuj kąt, obróć o niego stałe przesunięcie i dodaj wynik do punktu. Mnożenie wektora przez rotację powoduje jego obrót: Quaternion.Euler(0, angle, 0) * offset obraca przesunięcie wokół osi y, a jego długość i wysokość pozostają takie same. Ta kamera krąży wokół posągu z prędkością 20 stopni na sekundę, zawsze 3 jednostki nad nim i 6 jednostek od niego:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

Przy kącie 0 przesunięcie wynosi (0, 3, -6), więc kamera znajduje się za posągiem. Przy kącie 90 wynosi (-6, 3, 0), czyli kamera znajduje się po stronie -x posągu, a przy kącie 180 wynosi (0, 3, 6), czyli kamera znajduje się przed nim. Przesunięcie kamery nie obraca jej, dlatego LookAt kieruje ją z powrotem na posąg z każdego nowego miejsca.

Kąt przechowujesz we własnym polu, tak jak w przypadku kątów Eulera: może przekroczyć 360 lub spaść poniżej 0 bez przeskoku, a Ty możesz ograniczyć jego zakres lub zmieniać go z klawiatury. Wykonanie tego w LateUpdate() umieszcza kamerę po tym, jak posąg lub gracz poruszył się w danej klatce.

challenge icon

Wyzwanie

Średni

Pozwól graczowi latać kamerą wokół wieży, zawsze w odległości distance (8) jednostek od pozycji wieży i zawsze patrząc na nią. Skrypt przechowuje dwa kąty w zmiennych yaw i pitch:

  • yaw określa, jak daleko kamera obróciła się wokół wieży. Strzałka w prawo zwiększa tę wartość, a strzałka w lewo ją zmniejsza z prędkością turnSpeed (90) stopni na sekundę. Przy yaw równym 0 kamera znajduje się po stronie -z wieży; przy yaw równym 90 — po stronie -x.
  • pitch określa, o ile stopni kamera znajduje się powyżej poziomu wieży, patrząc z jej perspektywy. Strzałka w górę zwiększa tę wartość, a strzałka w dół ją zmniejsza z prędkością tiltSpeed (45) stopni na sekundę; wartość pozostaje w zakresie od 10 do 60.

Na początku yaw wynosi 0, a pitch 30, co umieszcza kamerę 4 jednostki powyżej pozycji wieży i 6.93 jednostki za nią. Naciśnij Play, polataj wokół, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // Strzałki zmieniają yaw i pitch.
    }

    void LateUpdate()
    {
        // Umieść kamerę wokół target i skieruj ją na niego.
    }
}
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