Menu
CoddyTech

Kamera orbitalna

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

Aby krążyć wokół punktu, przechowuj kąt, obracaj o niego stałe przesunięcie i dodawaj wynik do punktu. Mnożenie obrotu przez wektor wykonuje 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 w górę i 6 jednostek dalej:

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 90 wynosi (-6, 3, 0), po stronie -x posągu, a przy 180 wynosi (0, 3, 6), przed nim. Przesunięcie kamery nie obraca jej, więc LookAt kieruje ją z powrotem na posąg z każdego nowego miejsca.

Drugi kąt unosi kamerę: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) obraca kierunek do tyłu w górę o pitch (dodatni obrót wokół x kieruje (0, 0, -1) w górę), a następnie obraca go wokół osi o yaw, dzięki czemu kamera pozostaje w odległości distance pod dowolnym kątem.

Kąt jest przechowywany 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 go ograniczyć lub zmieniać za pomocą 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 poruszać kamerą wokół wieży.

  1. W Update() strzałki w prawo i w lewo zmieniają yaw z szybkością turnSpeed, a strzałki w górę i w dół zmieniają pitch z szybkością tiltSpeed, pomnożoną przez Time.deltaTime.
  2. Następnie pozostaw pitch = Mathf.Clamp(pitch, 10f, 60f);.
  3. W LateUpdate() ustaw transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, a następnie transform.LookAt(target);.

Naciśnij „Graj” i lataj wokół wieży. Następnie naciśnij „Sprawdź”.

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

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity